[動画検証]MHP2Gのダウンロード版とUMD版のロード時間検証part2

PSP go「プレイステーション・ポータブル go」 ピアノ・ブラック(PSP-N1000PB) 特典 PSP go スタートキャンペーンプロダクトコード付き

先日の「MHP2Gのダウンロード版とUMD版のロード時間を検証してみた」の記事や、

「PSPgo+レグザZ9000+モンハン持ちPS3コントローラでMHP2G」は、

思ったよりも多くの反響がありまして、今日はその第三弾をやってみました。

前回のダウンロード版のロード時間検証は「新規キャラ」と

MHP2Gの最初のクエ、村1の「雪山草摘み」だったのですが、

今回のロード時間検証は「既存キャラ」と

MHP2Gの最後のクエ、G3最後の緊急クエスト「絶対零度」でやってみました。

つまり、クエストなどの条件が変わったら、結果が変わるかどうか…の検証ですね。

検証その1:
両方メディアインストールした場合のUMD版とダウンロード版の違い

→MHP2G ダウンロード版対UMD版 集会場絶対零度ウカムルバスのロード時間
(*YouTubeへのリンク)

前回の雪山草摘みはほぼ差がありませんでしたが、今回の絶対零度ウカムルバスだと、

ダウンロード版はUMD版よりも約2.5秒速かったです。

一番大きいな違いな、UMDのシークを行ったかどうか…ですが、

ディスクを読みに行ったら、結構遅くなりますね。

これは遊ぼうとするクエストは、

メディアインストールに含まれているかどうかの差…かもしれません。

雪山草摘みだとほとんどディスクを読みに行きませんが、

ウカムだとそれなりに読み込みます。

そこにロード時間の差が出たかもしれません。

検証その2:
メディアインストールしたUMD版としてないDL版のロード時間差

→MHP2G メディアインストール済UMD版対MI無しダウンロード版 絶対零度
(*YouTubeへのリンク)

こちらですが、計測してみますと、

メディアインストールしたUMD版はしてないダウンロード版よりも約2.5秒早い。

こちらは前回と同じ結論になります。

「ダウンロード版でもメディアインストールしたほうが早い」ですね。

ちょっと簡単にまとめます。

前回の雪山草摘みの時の結果は:

  1. メディアインストールしたら、ダウンロード版とUMD版はほぼ差がない。
  2. メディアインストールしなかったら、ダウンロード版はUMD版よりもずっと早い。
  3. メディアインストールしなかったダウンロード版はしたUMD版よりも遅い。

今回の絶対零度の結果はこんな感じです。

  1. メディアインストールしたら、ダウンロード版はUMD版よりも若干早い。
  2. メディアインストールしなかったダウンロード版はしたUMD版よりも若干遅い。

(*メディアインストール無しの結果は明らかなので、検証していません)

この二回の検証を総合的に何が言えるかと言うと、

  1. メディアインストールした場合、ダウンロード版のロード時間はUMD版と同等、もしくはダウンロード版がやや早いこともある。同等か速いかはクエスト次第。
  2. メディアインストールしなかったら、ダウンロード版はUMD版よりもずっと早い。
  3. メディアインストールしなかったダウンロード版はメディアインストールしたUMD版よりも若干遅い(数秒程度)。

絶対零度ウカムルバスに限って言えば、同じくメディアインストールした場合、

ダウンロード版はUMD版よりも約2.5秒速く、

そしてそのUMD版はメディアインストールしないDL版よりも約2.5秒速い。

ダウンロード版のメディアインストールは約5秒のロード時間短縮になる。

前回の初歩的な結論では、

ロード時間短縮のためのダウンロード版購入は無意味…なので、

「UMD版をお持ちで、ディスクを持ち歩いても困らない方なら、

わざわざダウンロード版を買わなくでも良いかもしれません。」でしたが、

今回の検証結果も加えた結論では、

「ロード時間短縮のためのダウンロード版購入は限定的ながら効果的」です。

従いまして、「UMD版をお持ちで、ロードを速くしたいなら、

ダウンロード版を買っても良さそうです。」といのは結論になりますね。

個人的に、ダウンロード版のメリットは数秒のロード時間短縮よりも

シーク音が完全に無くなったのは一番嬉しいところだけどね。

その次に、PS3コントローラーが使えるのもかなり嬉しい!です。

comments

卒業式・修了式・学位授与式

今日はKCG、KCGIの卒業式です。

今までの卒業式は風景はこのページから見れます。

→キャンパスライフ・学生の四季・卒業式
→キャンパスライフ・学生の四季・卒業祝賀会

いつものことながら、粛々とした雰囲気の中で、

学生達は一人ひとりの晴れ姿を見ることが出来て、教える側からしてみれば、

イチバン自分の「仕事」を実感できる時じゃないかと思います。

今日は学長などの方々が体調不良で、代読が何人が居るなど、

ちょっとしたアクシデントがありましたが、

総じて、結構よい卒業式・学位授与式に成ったかと思います。

「卒業」「修了」というのは「終り」…というイメージが強いのですが、

むしろ個人的にこれは新しい「始まり」じゃないかと思います。

卒業生、修了生たちの将来を期待したいところですね。

人生では、「式」というのは一つの区切りです。

コレまでの自分、コレからの自分について考えるチャンスでもあります。

・自分は何をしたいのか
・自分は何が出来るのか
・自分はこれからどうするのか、

長い目で見て、考えることが出来れば、必ず良い未来が訪れると思います。

というよりも、一昔前なら、何も考えなくでもやっていけたが、

厳しい時代になりましたので、色々思索していく必要性が高まっています。

ぉぅぇぃのマイルールでは、学生一人一人が学位記や賞を受け取る度に、

「ガンバレよ」と心のなかで激励するようにしています。

修身・斉家・治国・平天下、一つ一つステップを踏まえて、

これからの人生を頑張って欲しいですね。

comments

PSPgo+レグザZ9000+モンハン持ちPS3コントローラでMHP2G

ワイヤレスコントローラ(DUALSHOCK3) ブラック

昨日の「MHP2Gのダウンロード版とUMD版のロード時間を検証してみた」に続き、

今日もダウンロード版のモンハンの話を少々。

さて、モンスターハンターポータブル2ndGのダウンロード版の発売に伴ない、

機種はPSP go、画面出力はレグザZ9000の大画面、

入力デバイスは快適なPS3ワイヤレスコントローラーという、

かなり進化した環境でモンハンを楽しめるようになりました。

というわけで、早速やってみました。

引き継ぎナシの新しいキャラクターを作って、最初から初めてみました。

進捗ですが、昨日今日の6時間強で現在は村☆☆☆まで進みました。

装備はこんな感じ:
ブレイズブレイド
ハンターヘルム(体力珠)
ハンターメイル
ハンターアーム(体力珠)
ギアノスフォールド
ゲネポスグリーヴ

あんまりゆっくり遊ぶ余裕もありませんので、一番慣れている大剣でやりました。

まず、気になるのはモンハン持ち…ですが、これは問題なくできます。

というか、PSPよりもず〜っと楽ですね。

↓PS3ワイヤレスコントローラーのモンハン持ちはこんな感じです

PS3コントローラーでモンハン持ち

(*SIXAXISです、軽いほうが好き。)

まあ、PS3コントローラーのホールド性はPSPのそれと全然違いますので、

扱い易いのは、当たり前と言えば当たり前ですね。

PSPの場合、十字キーと左スティックはかなり近いので、

PSPでのモンハン持ちも結構窮屈だったのですが、

PS3コントローラーだとそれなりに離れていますので、

人差し指もちょっとゆったり気味。

というわけで、PSPのモンハン持ちの時の左手の指の疲労も緩和されそうです。

それだけではなく、指の腹の部分ではなく、

その気になれば指先でピンポイントで十字キー押せますので、

操作ミスも少なくなりそうですね。

まあ、モンハン持ちと関係なく、PS3コントローラーの左キノコが大きいので、

それだけで、PSPの操作性と全然違うのですね。

上手とは言い難いぉぅぇぃでもラクラク操作できちゃいますね。

なんとなくですが、PSPでやったときよりも3割増しうまく成った錯覚に陥ます。

まあ、まだ村3でシビアな戦い全然なく、全然余裕ゆうゆうでしたので、

もうちょっと進んだら、感想も変わってくるかもしれません。

で、PS3コントローラーでMHP2Gを遊ぶときの注意点…というか、

アクションゲーム全般に言えてることですが、

「PS3コントローラーのバッテリー切れに注意しましょう!」ですね。

PS3コントローラーでPSP goを操作する時、

なんかバッテリーの残量を確認する方法がないみたいで、いきなり切れちゃいます…。

村3までで一回だけ戦闘不能に陥たのですが、

操作ミスとかではなく、コントローラーのバッテリー切れでした…。

「アレ?あれ?動かない」って慌てていましたら、フルフルにヤられてしまいました。

後々で良く考えましたら、PSP goのほうで操作したり、

とりあえずgoの主電源を落としたらOKだよね…。

まあ、テレビ横のグレードルに刺さっていましたので、

もうちょっと俊敏に動かないとダメだったかもしれません。

とりあえず教訓。

ワイヤレスコントローラーだけど、常に充電を忘れずにやっときましょう…です。

レグザで映るMHP2Gの画面ですが、昔書いた

「[レビュー]東芝レグザZ9000のPSPゲーム画面の写真いろいろ」で見れますので、

興味のある方、そちらで見てみて下さい。

PS3のゲームとかと比べたら、画面がキレイ…とは言い難いのですが、

遊んでいると、全然気にならないよね。

まあ、このゲームはよく出来ていますので、ハンティングしている時は、

画面の良し悪しよりもモンスターに集中してしまうからね〜

しかし、例えば採取している時とか、じ〜っと画面を見てみますと、

「やっぱちと汚いなぁ…」っと思いますね。

まあ、日ごろはHDゲームで目が贅沢になっているせいですね。

何はともあれ、ぉぅぇぃはPSPgo+レグザ+PS3コンのMHP2Gはかなり満足しています。

ある意味、本来のPSP-1000〜PSP-3000時代のモンハンと比較しましたら、

大画面と快適コントローラーで遊ぶモンハンは別ゲーム…と言えなくもないですね。

とは言え、全く文句がない…というと、そうでもありません。

まず、PS3コントローラーのキーコンフィグが欲しい…ですね。

これが出来れば、十字キーを右スティックに割り当てられます。

世の中の大半のゲームは右スティックでカメラ視点の操作を行いますので、

これが出来たら本当に最強…になりますね。

これに関しては、SCEのファームアップを待つしかありません。

まあ、ヤル気あるかどうも分からないけどね。

次に、やっぱり画面をもうちょっとキレイにならないかな〜っと思ったりします。

これは年度末のモンスターハンターポータブル3rdに期待したいところですね。

まあ、どう頑張ってもPSPの枠を超えられないのですが、二年前と比べたら、

最近のPSPゲームは結構グラフィックも頑張るようになっていますので、

時代相応な進化を見せて欲しいですね。

但し、このプレイ環境を整えるのは、

それなりにお金がかかる…というのは最大な難点ですね。

画面出力を諦めても、PSP goとPS3コントローラーを揃わないといけないので、

PSP-3000で遊ぶ時よりも1万円くらい割高になります。

そして、PSP goでPS3コントローラーを利用するために、

PS3を使ってペアリングしなければならないのもネックになります。

まあ、ペアリングは一回だけ済ませばOKなので、

PS3所持の友人や日ごろ利用している近所のゲームショップに相談したら、

どうにかなると思います。

一式を揃うのは結構投資しなければならないのですが、

遊び慣れたMHP2Gを新鮮な気持ちで遊んでみたい…っと思いましたら、

PSP go+PS3コントローラーのセットは結構オススメできます。

comments

[動画検証]MHP2Gのダウンロード版とUMD版のロード時間を検証してみた

PSP go「プレイステーション・ポータブル go」 パール・ホワイト(PSP-N1000PW) 特典 PSP go スタートキャンペーンプロダクトコード付き

3月21日追記:
更に検証をしました。
→[動画検証]MHP2Gのダウンロード版とUMD版のロード時間検証part2

若干結論が変わりましたので、良かったらそちらも見てみて下さい。

CAPCOM社の大ヒット作、モンスターハンターポータブル2ndGの

ダウンロード版配信、本日3月18日から始まりました。

電撃発表、電撃配信だったのですが、

理由は新作のモンスターハンターポータブル3rdのウォーミングアップ…と見て、

ほぼ間違いないでしょう。

ダウンロード版に乗じて、SCEもキャンペンを展開しました。

→「PSP®goでモンハンやろーぜ!『モンスターハンターポータブル 2nd G』無料ダウンロード用プロダクトコードプレゼントキャンペーン実施」

まあ、ダウンロード版の配信が始まったからキャンペーンを始めたのか、

あるいはキャンペーンを始めたいからダウンロード版の配信が始まったのか、

非〜常〜に微妙なところだけどね。

ぉぅぇぃと言えば、戦場のヴァルキュリア2のために、

レグザの37Z9000とPSPgoを購入してから、

「PS3コントローラーでモンハン持ちしたら、どうなるのかな…」

と密かに思っていましたので、

本日のダウンロード版の配信は、まあ、楽しみの一つではあります。

というわけで、UMD版を持っていましたが、

早速1,600円を払って、PSストアからダウンロードしました。

実際にレグザ37Z9000+PSPgo+PS3コントローラーでMHP2Gを遊ぶとどうなるか…

については、もうちょっとやりこまないとなんとも言えませんので、

とりあえずボチボチ時間を作って、

新しいキャラを作って最初からやってみようかな〜っと思ったりしています。

追記:やってみた。
→PSPgo+レグザZ9000+モンハン持ちPS3コントローラでMHP2G

で、とりあえず、ダウンロード版と言えば、気になるのはロード時間…だよね?

というわけで、とりあえずそれを検証してみました。

折角なので、デジカメで動画を撮って、YouTubeにアップしてみました。

いや、前からYouTubeにデビューしようかな〜っと思ったりしていましたので、

これをキッカケに、YouTubeのアカウントを作ってみました。

前提条件ですが、新しいデフォルトのキャラを作成し、

同じ「雪山草摘み」のクエストをやって、そのロード時間を検証してみました。

が、クエスト開始のボタン押しはかなりアナログ…というか、

箸で両方の□ボタンを押しているだけなので、

それなりの誤差が出ている可能性はかなり高い。

まあ、参考程度で見て頂けましたら良いかと。

検証したYouTube動画は、リンク先で確認してください。

画質かなり悪い…というか、フォーカスも合ってないような動画なので、

著作権的に特に問題はないと思いますが、

もしカプコンさんや代理の方が不適切と判断されましたら、

連絡して頂けましたら速やかに削除致します。

検証その1:
両方メディアインストールした場合のUMD版とダウンロード版の違い

→MHP2G UMD版(PSP-2000) vs DL版(PSPgo)

ほぼ誤差範囲…ですね。

ダウンロード版だからと言って、UMD版よりも早い…ということはなさそうです。

というか、UMD版のほうが若干早く感じなくもない。

が、やっぱりほぼ誤差範囲ですね。

検証その2:
メディアインストールしたUMD版とメディアインストールしてないダウンロード版の違い

→MHP2G インストール済UMD版(PSP-2000) vs インストール無しDL版(PSPgo)

メディアインストールしたUMD版はメディアインストールしてないDL版よりも早い。

これはかなり明らかですね。

従いまして、ダウンロード版を購入した場合でも、

メディアインストールは済ませたほうが良さそうです。

しかし、差は数秒程度なので、

メディアインストールの容量(約500MB?)がモッタイナイ…っと思いましたら、

インストールしなくでも著しく快適さが下がるわけでもなさそうです。

検証その3:
両方メディアインストールしてない場合のUMD版とDL版の違い

→メディアインストール無しMHP2G UMD(PSP-2000) vs DL版(PSPgo)

まあ、比較するまでもないですが、メディアインストールしないと、

UMD版はと・て・も遅いのですね。

ダウンロード版は、まあ許容範囲…じゃないでしょうか?

おまけ検証:
ダウンロード版のPSP-2000とダウンロード版のPSPgo

→メディアインストール済DL版のMHP2G PSP-2000(DL版) vs PSPgo(DL版)

いや、なんか検証していますと、PSPgoはちょっと処理が遅い?

のような疑惑が浮上しましたので、

PSP-2000のほうにもダウンロード版を入れてみて、検証してみました。

結果は、ほぼ同じ…ですが、若干goのほうが遅いのような気がします。

PSP-2000のほうはかなり高速なメモリスティックを入れていますので、

それの差かもしれません。

機会がありましたら、PSPgoのほうにも高速なメモリを入れてみて、

違いがあるかどうかを見てみていですね。

とりあえずロード時間の検証はこんな感じですね。

メディアインストールしたら、UMDもダウンロードもほとんど変わらない…のは、

ぉぅぇぃの初歩的な結論です。

なんというか、MHP2Gのメディアインストールはいかに優秀だったか…

がよくわかる検証になりましたね。

まあ、ダウンロード版のメリットはロード時間というよりも、

イチイチUMDディスクを持ち歩かなくでも良い…というのが一番大きいし、

UMD版は実売価格1,800円くらいで、

ダウンロード版は1,600円と比較的に割安なので、

メモリ容量に余裕がありましたら、

未経験の方だと今ならダウンロード版がオススメかな?

UMD版をお持ちで、ディスクを持ち歩いても困らない方なら、

わざわざダウンロード版を買わなくでも良いかもしれません。

comments

Google Web Toolkit(GWT) 2.0入門チュートリアル日本語訳:5.クライアント機能のコーディング-3

Google Web Toolkit(GWT) 2.0の入門チュートリアルのリスト

スタート ガイド
1.GWT プロジェクトの作成-1
1.GWT プロジェクトの作成-2
2.アプリケーションの設計
3.ユーザー インターフェースの構築-1
3.ユーザー インターフェースの構築-2
3.ユーザー インターフェースの構築-3
4.クライアントのイベントの管理-1
4.クライアントのイベントの管理-2
5.クライアント機能のコーディング-1
5.クライアント機能のコーディング-2
5.クライアント機能のコーディング-3
6.GWT アプリケーションのデバッグ
7.スタイルの適用-1
7.スタイルの適用-2
7.スタイルの適用-3
7.スタイルの適用-4
8.GWTアプリケーションのコンパイル

前回はGoogleのGWT 2.0の入門チュートリアルの日本語訳(5-2)です。

今回は「5.クライアント機能のコーディング」の最終回になります。

→http://code.google.com/intl/ja/webtoolkit/doc/latest/tutorial/codeclient.html

始まる前に、まず、お断りを…。

私は英語のネイティブでも日本語のネイティブでも、プログラミング言語のネイティブでもないので、私が訳したモノの正確性に関しては、全く責任を持ちませんし、これらのドキュメントによって、何かの損害を被ても、やっぱり何一つ責任を持つことが出来ませんので、読みに来られた方、すべて自己責任でお願いします。

GoogleののGWT規約によれば、GWTはGoogle製のサンプルなども含めて、著作権に関してはApache 2.0のライセンスを利用していますし、グーグルのチュートリアルについても、「クリエイティブ・コモンズの表示 3.0 ライセンス」でライセンスされていますので、翻訳しても、出典を知らせれば特に問題がないと認識しています。もし著作権法などに対し、何か問題がありましたら、ぉぅぇぃまでお知らせして頂けましたら、素早く適切に対処致します。

日本語訳なんですが、適宜にコメント、いわゆる「訳注」的なモノも入れます。訳注は(*…)のように表記します。可能な限りオリジナルとの区別をつけますし、間違いが出ないように注意しますが、漏れ・誤りがありましたらごめんなさい。

最後に、基本的にぉぅぇぃはEclipseを使っていますので、申し訳ございませんが、Eclipseと全く関係ない部分は飛ばすつもりです。

3.タイムスタンプを追加する

タイムスタンプは実装しなければならない機能の最後の部分になります。ユーザインタフェースの中にタイムスタンプを作成するために、lastUpdatedLabelというLabelウィジェットを利用します。Labelウィジェットのためのテキストを設定します。このコードをupdateTable(StockPrice[])メソッドに追加します。

1.タイムスタンプの実装

updateTable(StockPrice)メソッドの中に、下の強調されたコードをコピーペーストしてください。


/**
* Update the Price and Change fields all the rows in the stock table.
*
* @param prices Stock data for all rows.
*/
private void updateTable(StockPrice[] prices) {
for (int i = 0; i < prices.length; i++) {
updateTable(prices[i]);
}

// Display timestamp showing last refresh.
lastUpdatedLabel.setText("Last update : "
+ DateTimeFormat.getMediumDateTimeFormat().format(new Date()));


}

EclipseはDateTimeFormatをDateにエラーフラグを立ちます

2.インポートを入れます

import com.google.gwt.i18n.client.DateTimeFormat;
import java.util.Date;

3.タイムスタンプをテストする
変更を保存します。ブラウザでリフレッシュ(再読み込み・リロード)を押し、変更をロードしてください。タイムスタンプラベルは株式テーブルの直下に表示されるはずです。株価と変動率がリフレッシュされるたび、タイムスタンプは最終更新日時を表示するはずです。

StockWatcherにタイムスタンプを追加しました

実装の注意点:もしかするとあなたはDateTimeFormatとNumberFormatはcom.google.gwt.i18nのサブパッケージに含まれているを気づき、これらは何らかの方式で国際化に関わっていると推測しているかもしれません。確かに、これらはそのようなことをやっています:両方のクラスは数値や日付をフォーマットする時に、自動的にあなたのアプリケーションのロケール(locale)の設定を利用します。Internationalizing a GWT Application(*英語)のチュートリアルで、GWTアプリケーションを他の言語に地域化(localizing)や翻訳(translating)する方法を学べます。

次回のチュートリアル

この時点では、あなたはユーザインタフェースコンポーネントを構築し、StockWatcherアプリケーションのすべてのクライアント側の基本機能をコーディングした。ユーザは株を追加・削除することができます。株価と変動率は5秒ごとにアップデートされます。タイムスタンプは最終更新される度に表示されます。

ユーザが証券を入力する時のマウスとキーボードイベントのためのイベントハンドラインターフェースを実装しました。Stockwatcherは入力を検証してレスポンスします。

これで、あなたはテーブルに株を追加し、削除のためのボタンを提供するためのクライアント側のコードを実装するための準備を整えました。同じく、株価とデータ、そして最終更新の時の時間を表示するためのタイムスタンプを表示します。

StockWatcherはまだ完成していませんが、最終状態をテストしたいなら、Run StockWatcherを御覧下さい。

バグ

チュートリアルのために、我々はコードの中に一つのエラーを入れました。気づきましたでしょうか?

変動率のパーセンテージを見てください。これはちょっと小さすぎませんか?もしあなたが数学をやっているのであれば、これらはしかるべき数値よりもず〜っと小さいことを気づくでしょう。StockWatcherのコードの中に、計算の誤りが隠されています。次のステップは、GWTとあなたのJava統合開発環境(IDE)に提供されているツールを使って、問題点を探し出し、修正します。

→ステップ6:GWT アプリケーションのデバッグ

comments

Google Web Toolkit(GWT) 2.0入門チュートリアル日本語訳:5.クライアント機能のコーディング-2

Google Web Toolkit(GWT) 2.0の入門チュートリアルのリスト

スタート ガイド
1.GWT プロジェクトの作成-1
1.GWT プロジェクトの作成-2
2.アプリケーションの設計
3.ユーザー インターフェースの構築-1
3.ユーザー インターフェースの構築-2
3.ユーザー インターフェースの構築-3
4.クライアントのイベントの管理-1
4.クライアントのイベントの管理-2
5.クライアント機能のコーディング-1
5.クライアント機能のコーディング-2
5.クライアント機能のコーディング-3
6.GWT アプリケーションのデバッグ
7.スタイルの適用-1
7.スタイルの適用-2
7.スタイルの適用-3
7.スタイルの適用-4
8.GWTアプリケーションのコンパイル

前回はGoogleのGWT 2.0の入門チュートリアルの日本語訳(5-1)です。

今回は「5.クライアント機能のコーディング」の二回目になります。

→http://code.google.com/intl/ja/webtoolkit/doc/latest/tutorial/codeclient.html

始まる前に、まず、お断りを…。

私は英語のネイティブでも日本語のネイティブでも、プログラミング言語のネイティブでもないので、私が訳したモノの正確性に関しては、全く責任を持ちませんし、これらのドキュメントによって、何かの損害を被ても、やっぱり何一つ責任を持つことが出来ませんので、読みに来られた方、すべて自己責任でお願いします。

GoogleののGWT規約によれば、GWTはGoogle製のサンプルなども含めて、著作権に関してはApache 2.0のライセンスを利用していますし、グーグルのチュートリアルについても、「クリエイティブ・コモンズの表示 3.0 ライセンス」でライセンスされていますので、翻訳しても、出典を知らせれば特に問題がないと認識しています。もし著作権法などに対し、何か問題がありましたら、ぉぅぇぃまでお知らせして頂けましたら、素早く適切に対処致します。

日本語訳なんですが、適宜にコメント、いわゆる「訳注」的なモノも入れます。訳注は(*…)のように表記します。可能な限りオリジナルとの区別をつけますし、間違いが出ないように注意しますが、漏れ・誤りがありましたらごめんなさい。

最後に、基本的にぉぅぇぃはEclipseを使っていますので、申し訳ございませんが、Eclipseと全く関係ない部分は飛ばすつもりです。

2.テーブルの中の株式の株価及び変化率を更新する

ユーザがウォッチングしている株価を更新することはStockWatcherの最も重要な特徴です。もしあなたは古典的なウェブ開発テクニックでStockWatcherを書いたら、株価を更新したい時、毎回毎回ページを丸ごとリロードしなければなりません。あなたはそれを手動(ユーザーにブラウザのリフレッシュボタンを押して貰うようにする)や自動(例えば、HTMLのヘッダに<meta http-equiv="refresh" content="5">タグを入れる)で行うことでしょう。しかしWeb2.0世代では、単純に、それは十分に効率的とは言えません。この時代では…StockWatcheのユーザはページ全体のリフレッシュを待たずに株価を更新したいのです。

このセクションではあなたは:

  1. タイマーを実装し、その更新率を指定して、株価と変動率を自動更新します
  2. StockPriceクラスを作成し、株データのカプセル化を行います。
  3. refreshWatchListメソッドを実装することで、株価と変動率のための株データをランダムに生成します
  4. updateTableメソッドを実装することで、株データから株価と変動率をロードします

1.株データの自動リフレッシュ

GWTは密かなアプリケーションコンテンツのアップデートを簡単にします。StockWatcherのために、あなたはGWTのTimer(*タイマー)クラスを使って株価を自動更新します。

Timerはシングルスレッド・ブラウザセーフなタイマークラスです。タイマーはコードを将来の特定の時刻でのスケジュール実行を可能にします、一回限りの場合はscheduleメソッド、繰り返し実行する時はschduleRepeatingメソッドを利用します。ここでは5秒ごとにStockWatcherに株価を更新させたいので、scheduleRepeatingメソッドを利用します。

Timer発火したら、runメソッドは実行されます。StockWatcherではあなたはrunメソッドをオーバーライドし、その中で株価と変動率を更新するためのrefreshWatchListメソッドをコールします。現時点では、refreshWatchListの土台だけを作り、このセクションの後半で、それの実装も行います。

1.タイマーの実装

onModuleLoadメソッドを修正し、下記のようにTimerの新しいインスタンスを作成します。

  public void onModuleLoad() {

...

// Move cursor focus to the text box.
newSymbolTextBox.setFocus(true);

// Setup timer to refresh list automatically.
Timer refreshTimer = new Timer() {
@Override
public void run() {
refreshWatchList();
}
};
refreshTimer.scheduleRepeating(REFRESH_INTERVAL);


...

}

EclipseはTimer、REFRESH_INTERVALとrefreshWatcherにエラーフラグを立ちます。

2.Timerのためのインポートを宣言します。
Eclipseのショットカットを利用する場合、GWT Timerを確実に選んで下さい。

import com.google.gwt.user.client.Timer;

3.リフレッシュレートを指定します
Eclipseショットカットを利用しているのであれば、「定数を’REFRESH_INTERVAL’作成します」を選び、リフレッシュ間隔を5000ミリ秒に指定してください。
あるいは、下のコードをコピーペーストしても構いません。

public class StockWatcher implements EntryPoint {

private static final int REFRESH_INTERVAL = 5000; // ms

private VerticalPanel mainPanel = new VerticalPanel();

4.新しい株が追加されたら、すぐに株価と変動率を入れるようにします

addStockメソッドに、下の強調されたコードでTODOコメントを置き換えます。


private void addStock() {

...

// Add a button to remove a stock from the table.
Button removeStockButton = new Button("x");
removeStockButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
int removedIndex = stocks.indexOf(symbol);
stocks.remove(removedIndex);
stocksFlexTable.removeRow(removedIndex + 1);
}
});
stocksFlexTable.setWidget(row, 3, removeStockButton);

// Get the stock price.
refreshWatchList();


}

EclipseはrefreshWatchListにエラーフラグを立ちます。

5.StockWatcherクラスに、refreshWatchListメソッドの土台を作ります。


private void refreshWatchList() {
// TODO Auto-generated method stub

}

2.株価データのカプセル化

EclipseでJavaクラスを作成する

GWTがAJAX開発を加速するための主要な方法の一つは、Java言語でアプリケーションを書くことを許可したことです。これゆえ、あなたはオブジェクト指向プログラミングの静的型検査(static type checking)とtime-tested patterns(*意味わかんねえ…)のアドバンテージを取れます。これらはコード補完・自動リファクタリングなどのモダンな開発環境の機能と結合することで、良くまとまったコードベースで強固なAJAXアプリケーションを簡単に書くことができます。

StockWatcherでは、あなたは株価データをそれの独自クラスにファクタリングする能力のアドバンテージをとります。

1.StockPriceと名づけられた新しいJavaクラスを作成します。
Eclipseでは、パッケージエクスプローラでcom.google.gwt.sample.stockwatcher.clientパッケージを選び、Eclipseメニューバーから、「ファイル」→「新規」→「クラス」を選びます。
Eclipseは新規Javaクラスウィンドウを開いてくれます。

2.新規クラスウィンドウに記入します
名前のところに「StockPrice」
他のフィールドはすべてデフォルトのままで、「完了」を押します。

StockPriceクラスの作成

3.EclipseはStockPriceクラスの土台を作成します。

package com.google.gwt.sample.stockwatcher.client;

public class StockPrice {

}

4.下記のコードで土台を置き換えます。

package com.google.gwt.sample.stockwatcher.client;

public class StockPrice {

private String symbol;
private double price;
private double change;

public StockPrice() {
}

public StockPrice(String symbol, double price, double change) {
this.symbol = symbol;
this.price = price;
this.change = change;
}

public String getSymbol() {
return this.symbol;
}

public double getPrice() {
return this.price;
}

public double getChange() {
return this.change;
}

public double getChangePercent() {
return 10.0 * this.change / this.price;
}

public void setSymbol(String symbol) {
this.symbol = symbol;
}

public void setPrice(double price) {
this.price = price;
}

public void setChange(double change) {
this.change = change;
}

}

3.株データを生成する

現在では、あなたは株価データをカプセル化するためのStockPriceクラスを持っていますので、実際のデータを生成できます。これを行うために、refreshWatchListメソッドを実装します。refreshWatchListメソッドはユーザが株式を追加する時と5秒ごとのタイマーが発火する時の両方にコールされることを覚えといて下さい。

データをランダムに生成します

オンラインでのデータソースからリアルタイムの株価を取得する代わりに、あなたは擬似的なランダムな価格と変動率を作成します。これを行うために、(*java.util.Randomではなく)GWTのRandomクラスを使用します。次に、updateTableメソッドに渡すStockPriceオブジェクトの配列を作成します。

1.ランダムな株価を生成します
StockWatcherクラスに、refreshWatchListメソッドを下のコードで置き換えて下さい。

  /**
* Generate random stock prices.
*/

private void refreshWatchList() {
final double MAX_PRICE = 100.0; // $100.00
final double MAX_PRICE_CHANGE = 0.02; // +/- 2%

StockPrice[] prices = new StockPrice[stocks.size()];
for (int i = 0; i < stocks.size(); i++) {
double price = Random.nextDouble() * MAX_PRICE;
double change = price * MAX_PRICE_CHANGE
* (Random.nextDouble() * 2.0 - 1.0);

prices[i] = new StockPrice(stocks.get(i), price, change);
}

updateTable(prices);

}

EclipseはRandomとupdateTableにエラーフラグを立ちます。

2.インポート宣言を入れます

import com.google.gwt.user.client.Random;

3.updateTable(StockPrice[])メソッドの土台を作成します。

  private void updateTable(StockPrice[] prices) {
// TODO Auto-generated method stub

}

4.株価と変動率を入れます

最後に、ランダムに生成された株価と変動率のデータをStockWatcherのテーブルにロードします。各株式のために、価格と変動率の行を整形(フォーマット)した後に、データをロードします。これを行うために、StockWatcherクラスの二つのメソッドを実装します。

  1. 株価の値を小数点以下2桁に整形します
  2. 変動率の前に(+/-)記号を付け加えます

1.updateTable(StockPrice[])メソッドを実装します
土台を下記のコードで置き換えます。

  /**
* Update the Price and Change fields all the rows in the stock table.
*
* @param prices Stock data for all rows.
*/

private void updateTable(StockPrice[] prices) {
for (int i = 0; i < prices.length; i++) {
updateTable(prices[i]);
}


}

EclipseはupdateTableにエラーフラグを立ちます。
updateTable(StockPrice)メソッドの土台を作成します。

2.updateTable(StockPrice)メソッドを実装します
土台を下記のコードで置き換えて下さい。


/**
* Update a single row in the stock table.
*
* @param price Stock data for a single row.
*/
private void updateTable(StockPrice price) {
// Make sure the stock is still in the stock table.
if (!stocks.contains(price.getSymbol())) {
return;
}

int row = stocks.indexOf(price.getSymbol()) + 1;

// Format the data in the Price and Change fields.
String priceText = NumberFormat.getFormat("#,##0.00").format(
price.getPrice());
NumberFormat changeFormat = NumberFormat.getFormat("+#,##0.00;-#,##0.00");
String changeText = changeFormat.format(price.getChange());
String changePercentText = changeFormat.format(price.getChangePercent());

// Populate the Price and Change fields with new data.
stocksFlexTable.setText(row, 1, priceText);
stocksFlexTable.setText(row, 2, changeText + " (" + changePercentText
+ "%)");
}

EclipseはNumberFormatにエラーフラグを立ちます。

3.インポート宣言を入れます

import com.google.gwt.i18n.client.NumberFormat;

5.ランダムに生成された株価を変動率をテストします

この時点で、あなたがランダムに生成した株式データは株価と変動率の欄に入れられます。試して、見てみてください。

1.StockWatcherを開発モードで実行する
2.株を追加する
株価と変動率にデータが入るはずです。
5秒ごとに、データはリフレッシュされます。

StockWatcherに株価と変動率が追加されました

今回も長かったので、さらに分割します。

次回は「3.タイムスタンプの追加」に続きます。

comments

Google Web Toolkit(GWT) 2.0入門チュートリアル日本語訳:5.クライアント機能のコーディング-1

Google Web Toolkit(GWT) 2.0の入門チュートリアルのリスト

スタート ガイド
1.GWT プロジェクトの作成-1
1.GWT プロジェクトの作成-2
2.アプリケーションの設計
3.ユーザー インターフェースの構築-1
3.ユーザー インターフェースの構築-2
3.ユーザー インターフェースの構築-3
4.クライアントのイベントの管理-1
4.クライアントのイベントの管理-2
5.クライアント機能のコーディング-1
5.クライアント機能のコーディング-2
5.クライアント機能のコーディング-3
6.GWT アプリケーションのデバッグ
7.スタイルの適用-1
7.スタイルの適用-2
7.スタイルの適用-3
7.スタイルの適用-4
8.GWTアプリケーションのコンパイル

前回はGoogleのGWT 2.0の入門チュートリアルの日本語訳(4-2)です。

今回は「5.クライアント機能のコーディング」の前半になります。

→http://code.google.com/intl/ja/webtoolkit/doc/latest/tutorial/codeclient.html

始まる前に、まず、お断りを…。

私は英語のネイティブでも日本語のネイティブでも、プログラミング言語のネイティブでもないので、私が訳したモノの正確性に関しては、全く責任を持ちませんし、これらのドキュメントによって、何かの損害を被ても、やっぱり何一つ責任を持つことが出来ませんので、読みに来られた方、すべて自己責任でお願いします。

GoogleののGWT規約によれば、GWTはGoogle製のサンプルなども含めて、著作権に関してはApache 2.0のライセンスを利用していますし、グーグルのチュートリアルについても、「クリエイティブ・コモンズの表示 3.0 ライセンス」でライセンスされていますので、翻訳しても、出典を知らせれば特に問題がないと認識しています。もし著作権法などに対し、何か問題がありましたら、ぉぅぇぃまでお知らせして頂けましたら、素早く適切に対処致します。

日本語訳なんですが、適宜にコメント、いわゆる「訳注」的なモノも入れます。訳注は(*…)のように表記します。可能な限りオリジナルとの区別をつけますし、間違いが出ないように注意しますが、漏れ・誤りがありましたらごめんなさい。

最後に、基本的にぉぅぇぃはEclipseを使っていますので、申し訳ございませんが、Eclipseと全く関係ない部分は飛ばすつもりです。

ステップ5:クライアント機能のコーディング

この時点では、あなたはGWTウィジェットとパネルでユーザインタフェースを作成し、それらにイベントハンドラーを付け加えた。StockWatcherは入力を受け付けますが、現在はテーブルへの株の追加や株式情報の更新を行いません。

このセクションでは、あなたはStockWatcherのすべてのクライアント側の機能実装を完成します。特に下記のコードを書くことになります。

  1. 株テーブルに株式を追加・削除する
  2. テーブルの中の株式の株価及び変化率を更新する
  3. 最終更新日時のタイムスタンプを表示させる

StockWatcherの初期実装は十分にシンプルなので、それの機能をすべてクライアント側だけのコードで実現可能です。将来的に、株価データを取得するために、サーバーをコールを行うことになります。

株テーブルに株式を追加・削除する

あなたの最初の仕事は、証券コードと削除ボタンを株式テーブルに追加することです。FlexTableはデータを所持するために自動的にサイズを変更しますので、あなたはサイズ変更の処理を行うためのコードを書く必要が無いことを覚えといて下さい。

  1. データ構造を作成する
  2. 株式テーブルに列を追加する
  3. 株式テーブルから株を削除するためのボタンを追加する
  4. 開発モードでテストする

1.データ構造を作成する

ユーザが入力した証券コードのリストを格納するためのデータ構造が必要です。標準的なJavaのArrayListを使います。

1.データ構造を作成する
StockWatcher.javaのStockWatcherクラスに、JavaのArrayListの新しいインスタンスを作成します。


public class StockWatcher implements EntryPoint {

private VerticalPanel mainPanel = new VerticalPanel();
private FlexTable stocksFlexTable = new FlexTable();
private HorizontalPanel addPanel = new HorizontalPanel();
private TextBox newSymbolTextBox = new TextBox();
private Button addStockButton = new Button("Add");
private Label lastUpdatedLabel = new Label();
private ArrayList<String> stocks = new ArrayList<String>();

2.EclipseはArrayListにエラーフラグを立ち、インポート宣言の追加を提案します。
3.インポート制限を追加します。

import java.util.ArrayList;

2.株式テーブルに列を追加する

ユーザが証券コードを入力した後、最初にそれは重複ではないことを確認します。もしその証券コードは既存ではないのであれば、FlexTableに新しい列を追加し、最初のセルにユーザが入力した証券コードを入れます。FlexTableのセルに文字を入れるため、setTextメソッドを使います。

1.株を確認し、既存であるかどうかを見て、既に存在しているのであれば、再度追加しないようにしましょう。
addStockメソッドのTODOコメントをこんなコードで置き換えて下さい。

// Don't add the stock if it's already in the table.
if (stocks.contains(symbol))
return;

2.もし株は既存ではないなら、それを追加する
addStockメソッドのTODOコメントをこんなコードで置き換えましょう。

    // Add the stock to the table.
int row = stocksFlexTable.getRowCount();
stocks.add(symbol);
stocksFlexTable.setText(row, 0, symbol);

setTextメソッドをコールすれば、FlexTableは必要に応じて自動的に新しい
セルを追加します、従って、あなたはテーブルをリサイズする必要がありません。

3.株式テーブルから株を削除するためのボタンを追加する

リストから特定の株を削除出来るようにするために、テーブルの列の最後のセルに削除ボタンを挿入します。FlexTableにウィジェットを追加するために、setWidgetメソッドを利用します。addClickHandlerメソッドでクリックイベントを記述します。削除ボタンがクリックイベントを発行したら、FlexTableとArrayListから株を削除します。

1.リストから株を削除するためのボタンを追加します。
addStockメソッドの中に、TODOコメントをこのコードで置き換えて下さい。

    // Add a button to remove this stock from the table.
Button removeStockButton = new Button("x");
removeStockButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
int removedIndex = stocks.indexOf(symbol);
stocks.remove(removedIndex);
stocksFlexTable.removeRow(removedIndex + 1);
}
});
stocksFlexTable.setWidget(row, 3, removeStockButton);

4.開発モードでテストする

もう一つコーディングしなければならないTODOが残っています:株価の取得です。但し、まずは手早く開発モードで株式追加と株式削除の機能が予想とおりに稼働しているかどうかを確認します。

この時点で証券コードを入力したら、StockWatcherはそれを株式テーブルに追加します。それを試してみましょう。

1.StockWatcherを開発モードで実行します。
既存のブラウザのリフレッシュ(*再読み込み、リロード)を押します。

2.株式を追加する
入力ボックスで証券コードを入力します。
StockWatcherはその株をテーブルに追加するハズです。テーブルは新しいデータを格納するためにリサイズされます。しかし、価格と変動率の欄は相変わらず空っぽです。小文字の証券コードを入力したら、それは大文字にコンバートされます。

3.テーブルに重複の株を追加できないことを確認します。
テーブルに既に存在している証券コードを入力します。
StockWatcherは入力ボックスをクリアしますが、その同じコードを再度追加しません。

4.株の削除
削除ボタンをクリックします。
その株式はテーブルから削除され、テーブルはリサイズされます。

StockWatcherに株を追加する

次に、あなたは最後のTODO、株価取得を片付けます。

次はかなり長いので、今回も分割します。

次回は「2.テーブルの中の株式の株価及び変化率を更新する」に続きます。

comments

[写真付き簡単レシピ]ホワイトデーでハニーにお返し用の手作りハニークッキー

約9ヶ月前に、こんな記事を書きました。

→素人がオーブンレンジで焼く簡単手作りクッキーのレシピ

それからはそれほどクッキーを焼いていませんが、

バレンタインデーにお嫁様から手作りチョコレートを貰いましたので、

ホワイトデーのお返しはやっぱり手焼きクッキーだね!ということ、

今日は久しぶりにクッキーを焼きました。

どんなクッキーがいいかな〜っと思いましたが、

欧米風で言えば、マイ・ハニーに楽しんでもらうためのクッキーなので、

それならばハニークッキー…というか、はちみつクッキーに決めました。

出来たハニークッキーはこんな感じです。

↓ぉぅぇぃの手作りハニークッキー

ハニークッキーのアップ

クックック…、うまそうじゃのう…。

で、折角なので、作り方を残します。と言っても、

昔の「素人がオーブンレンジで焼く簡単手作りクッキーのレシピ」と結構似ていて、

ほとんどヘルシーシェフのクッキングガイドの「型抜きクッキー」のレシピ通りだけどね。

オリジナルのレシピはバニラエッセンスを入れるけど、今回ははちみつを入れました。

まあ、クッキーはクッキーだし。

日立ヘルシーシェフクッキングガイドの型抜きクッキーのレシピ・改

材料(角皿1枚分)

  • 小麦粉(薄力粉):140g
  • バター(室温に戻す):70g
  • 砂糖:50g
  • 卵(ときほぐす):30g
  • はちみつ:適量

作り方:

  1. バターをハンドミキサーで白ぽくなるまでよく練り、砂糖を加えて、さらによく混ぜます
  2. 卵を加えて、クリーム状になるまでよく混ぜる。
  3. はちみつを加え、さらに混ぜる。
  4. 小麦粉をふるいながら加え、木しゃもじでさっくりと混ぜます。
  5. 生地を一つにまとめてラップで包み、冷蔵室で約1時間休ませます。
  6. 生地をラップの間にはさみ、めん棒で5mmの厚さにのばします。
  7. 上のラップをはずし、型で抜き、角皿にアルミホイルを敷いて、並べます。
  8. オーブン、予熱、160℃にして、焼き時間16~22分にセットします。
  9. 予熱終了音が鳴ったら、角皿をオーブンの下段に入れて焼きます。

カロリー(手計算):約1,380kcal??

  • 小麦粉(薄力粉):140g=約530kcal
  • バター:70g=約520kcal
  • 砂糖:50g=約180kcal
  • 卵:30g=約50kcal
  • はちみつ:適当=まあ、100kcalくらい??

クッキーのコツ

小麦粉を混ぜるとき
切るようにさっくりと混ぜ、練らないようにします。
生地がベタつくときは
ラップで包み、冷蔵室でしばらく冷やしてから作ります。
打ち粉を多く使うと粉ぽくなり、口当たりが悪くなります。
生地の大きさや厚みはそろえて
大きさや厚みが違うと、焼き上がりにむらが出来ます。
市販の生地を使う時は
生地の種類により焼き方が違うので、様子を見ながら焼きます
生地の保存は
冷蔵室で一週間、冷凍室で一ヶ月くらいもちます。ラップに包んで保存してください。
焼きあがったらすぐ取り出す
そのまま加熱室に置くと、予熱でこげすぎることがあります
焼きむらが気になるときは
残り時間3~4分で角皿を前後を入れ替えてさらに焼きます。

で、今回は写真付き簡単レシピということで、作業工程中の写真も載せます。

まあ、写真版の作り方レシピ…って感じですね。

↓ハニークッキーの材料一式

手作りはちみつクッキーの材料

(*間違ってドライイーストを並べましたが、使っていません。)
(*はちみつは台湾から持ってきた天然蜂蜜ですが、器が大きいので並べていません。)

↓ハンドミキサーでバターを白くなるまで混ぜる

ミキサーでバターを混ぜる

(*バターが冷えてて固いと混ぜれないので、混ぜにくい時はレンジとかで軽く温めましょう)

↓練ったバターに砂糖を加えて、更に混ぜます

練ったバターに砂糖を加える

(*量が少ないと混ぜにくいけど、根気よくやれば大丈夫)

↓混ぜたらこんな感じ

バター砂糖を混ぜる

(*レシピの倍量とかならちょっと簡単になりますが、カロリーも大変なことに)

↓更に卵を加えて、混ぜます

バター砂糖に卵を加える

(*卵二分の一個です。残った卵は他の料理に適当に混ぜましょう。)

↓バター・砂糖・卵を混ぜたらこんな感じ

バター砂糖卵を混ぜる

(*量が少ないと、混ぜにくいのう…。)

↓さらにはちみつを加えて混ぜます

バター砂糖卵にはちみつを加える

(*大体大さじ2〜3杯くらい入れました)

↓混ぜたらこんな感じ、結構クリームぽくなりますね

バター砂糖卵はちみつを混ぜる

↓小麦粉をふるいながら加えます。家にザルがないので、茶こしでやりました。

バター砂糖卵はちみつに小麦粉を加える

(*茶こしだと結構時間かかりますので、愛を込めて気長にやりましょう。)

↓小麦粉の山

薄力小麦粉の山

↓木しゃもじでさっくり混ぜます。

生地に木しゃもじで入刀

(*練らないように、しゃもじを回らずに、縦で斬り込むようにグサグサと。)

↓混ぜ終わったらこんな感じ

生地をさっくりと混ぜます

(*白い小麦粉が見えなくなり、生地がこなれてきたら程よいかな?)

↓出来た生地をラップに移します

生地をラップに移す

(*スプーンとかでやりましょう)

↓その生地をラップで包み、冷蔵庫で1時間ほど休ませます

生地をラップで包み、冷蔵庫へ

(*冷蔵した生地は1週間ほど持つらしいので、1時間以上でも多分大丈夫)

↓一時間後、冷蔵庫から生地を出して、二枚のラップで上下挟む

生地を出し、二枚のラップで挟んで、綿棒で伸ばす

↓めん棒を使って生地を5mmほどの薄さで伸ばします

綿棒で5mmほど伸ばす

(*お好みの厚さでいいけど、厚いと焼き時間が長くなります。)

↓型で抜き出します

型で抜き出す

(*西友で買った400〜500円くらいのクッキーの型です。)

↓色々抜き出された、穴だらけの生地

色々抜き出された残りの生地

(*捨てないでね!)

↓穴だらけの生地を丸め、伸ばし、型で抜けるを何回繰り返す。

生地をもう一度丸める

(*ネバネバしてきたら、冷蔵庫でもう一度冷やしましょう。)

↓最後では、生地はこんな小さくなりますが、頑張って抜く

最後では生地はこんなサイズに

(*最後は型で抜けないほど小さくなるが、適当にナイフでスティック状に細長く切りましょう)
(*試食用にいいかも?)

↓角皿にアルミホイルを敷き、生地を並べます

角皿にアルミホイルを敷き、生地を並べる

(*ちょっと多すぎたので、無理やりギュウギュウ並べました。)
(*実はレシピよりもちょっとだけ多めの量で作りました。)

↓生地を160℃、20分焼いたらこんな感じ

生地を160℃20分焼いた後

素人なので、厚さのバラツキがありましたし、型の大きさにもバラツキがありました。

それゆえ、焼きのムラもありましたね。

で、十分に焼いたやつだけ角皿から出して、焼き目が足りない部分を残して、

追加で焼くようにしました。

↓焼き目が足りない部分だけを5分追加焼きしたらこんな感じ

焼き目が足りない部分を5分追加焼き

↓ハニークッキーを白い皿で盛りつけました

はちみつクッキーを白い皿で盛り付け

↓最後に、最初にお見せしたハニークッキーのアップをもう一度

ハニークッキーのアップ

と、まあ、こんな感じですね。

お味ですが、自画自賛的に、かなりイケてると思います。

バター多めなので、サクサクで食感も◎す。

はちみつの風味もシンプルながらクッキーに適しています。

マイハニーのお嫁様もゎぃゎぃと大喜び!です。(ぉぅぇぃ調べ)

ちなみに、昔書いた
「素人がオーブンレンジで焼く簡単手作りクッキーのレシピ」は、

地〜味〜ながら、実はそこそこ読まれていました。

アクセス解析はこんな感じ

↓去年6月書いてから昨日まではこんな感じ、ページビューは2,357です。

素人クッキーのアクセス解析

ちなみに、右のほうに二つ山がありますが、

一つ目の山は今年のバレンタインデー前の2月10日〜14日、

二つ目の山はホワイトデー前の3月10日〜13日(昨日まで)ですね。

まあ、一年の中に手作りクッキーに最も需要がある時期…ってことですね。

多くの方に読んで欲しいなら、需要が出そうな当日ではなく、

その一週間前とかに書かないと行けないかもね〜

comments

Google Web Toolkit(GWT) 2.0入門チュートリアル日本語訳:4.クライアントのイベントの管理-2

Google Web Toolkit(GWT) 2.0の入門チュートリアルのリスト

スタート ガイド
1.GWT プロジェクトの作成-1
1.GWT プロジェクトの作成-2
2.アプリケーションの設計
3.ユーザー インターフェースの構築-1
3.ユーザー インターフェースの構築-2
3.ユーザー インターフェースの構築-3
4.クライアントのイベントの管理-1
4.クライアントのイベントの管理-2
5.クライアント機能のコーディング-1
5.クライアント機能のコーディング-2
5.クライアント機能のコーディング-3
6.GWT アプリケーションのデバッグ
7.スタイルの適用-1
7.スタイルの適用-2
7.スタイルの適用-3
7.スタイルの適用-4
8.GWTアプリケーションのコンパイル

前回はGoogleのGWT 2.0の入門チュートリアルの日本語訳(4-1)です。

今回は「4.クライアントのイベントの管理」の後半になります。

→http://code.google.com/intl/ja/webtoolkit/doc/latest/tutorial/manageevents.html

始まる前に、まず、お断りを…。

私は英語のネイティブでも日本語のネイティブでも、プログラミング言語のネイティブでもないので、私が訳したモノの正確性に関しては、全く責任を持ちませんし、これらのドキュメントによって、何かの損害を被ても、やっぱり何一つ責任を持つことが出来ませんので、読みに来られた方、すべて自己責任でお願いします。

GoogleののGWT規約によれば、GWTはGoogle製のサンプルなども含めて、著作権に関してはApache 2.0のライセンスを利用していますし、グーグルのチュートリアルについても、「クリエイティブ・コモンズの表示 3.0 ライセンス」でライセンスされていますので、翻訳しても、出典を知らせれば特に問題がないと認識しています。もし著作権法などに対し、何か問題がありましたら、ぉぅぇぃまでお知らせして頂けましたら、素早く適切に対処致します。

日本語訳なんですが、適宜にコメント、いわゆる「訳注」的なモノも入れます。訳注は(*…)のように表記します。可能な限りオリジナルとの区別をつけますし、間違いが出ないように注意しますが、漏れ・誤りがありましたらごめんなさい。

最後に、基本的にぉぅぇぃはEclipseを使っていますので、申し訳ございませんが、Eclipseと全く関係ない部分は飛ばすつもりです。

3.ユーザイベントにレスポンスする

この時点で、StockWatcherはユーザーの入力を受け付けることができます。マウスやキーボードイベントはユーザーが証券コードを入力した時のシグナルです。次に、StockWatcherがイベントを察知した時に行うべきレスポンス、"株を追加する"のためのコードを書き、イベントハンドラインターフェースが稼働しているかどうかをテストします。StockWatcherは何らかのリクエストをサーバーに送ること無く、HTMLページをリロードすることもなく、クライアントサイトで応答します。

株テーブルに株を追加する

StockWatcherでは、ユーザは同時にモニタリングしたい株式の証券コードを入力ボックスに入力します。ユーザがエンターを押すか、Addボタンをクリックした時、StockWatcherは下記のようにレスポンスしてほしい。

  1. 入力のチェック
  2. 重複のチェック
  3. 株を追加
  4. 株をリストから削除するためのボタンを追加する

イベントハンドラインターフェースが稼働しているかどうか確認するために、このセクションでは、あなたは最初のレスポンス"入力チェック"のコードを書きます。次のセクション「5.クライアント機能のコーディング」では、あなたは株式追加のためのコードの残りの部分を書きます。

この部分はaddStockメソッドの機能を実装することになります。

テキストボックスへの入力を検証します

入力された証券コードが妥当であるかどうかを検証したい。ユーザーは実在の証券コードにマッチングした入力を行ったかのチェックではなく、このチュートリアルの目標では、簡単な文字妥当性チェックを行います。

最初に、証券コードを抽出します。getTexeメソッドでTextBoxウィジェット内のテキストを取得します。

次に、入力された文字はあなたが指定した不正文字のセットに含まれているかどうかを確認します。ユーザ入力を標準的な形に変換した後、正規表現でその形式をチェックします。必ずJavaとJavascriptの両方に同じ意味を持つ正規表現を使うこと、覚えといて下さい。

入力の妥当性が検証されたら、ユーザが他の証券コードを入力できるように、テキストボックスをクリアします。

最終的に、もし入力は妥当では無かったら、ダイアログボックスでユーザーに警告を出します。

1.ユーザの証券コード入力を検証します。

StockWatcher.javaの中に、addStockメソッドの土台を下のコードで置き換えます。


private void addStock() {
final String symbol = newSymbolTextBox.getText().toUpperCase().trim();
newSymbolTextBox.setFocus(true);

// Stock code must be between 1 and 10 chars that are numbers, letters, or dots.
if (!symbol.matches("^[0-9A-Z\\.]{1,10}$")) {
Window.alert("'" + symbol + "' is not a valid symbol.");
newSymbolTextBox.selectAll();
return;
}

newSymbolTextBox.setText("");

// TODO Don't add the stock if it's already in the table.

// TODO Add the stock to the table.

// TODO Add a button to remove this stock from the table.

// TODO Get the stock price.


}

Eclipseは"Window"にエラーフラグを立ち、インポートの宣言を入れることを提案します。

2.インポート宣言を入れます。

import com.google.gwt.user.client.Window;

4.イベントハンドリングをテストします

この時点では、あなたは入力ボックスに文字を入力することができます。もしあなたが不正文字を使ったら、ダイアログボックスは現れ、警告を表示します。試してみて、結果を見てみましょう。

1.開発モードでイベントハンドリングをテストします。
 開いているブラウザをリフレッシュ(再読込)します。

2.両方のイベントハンドラインタフェースの稼働をテストします。
入力ボックスで証券コードを入れます。エンターキーを押す、Addボタンをクリック、両方の方法で試してみて下さい。
現時点では、株はテーブルに追加されません。但し、他の株を追加するため、入力ボックスその都度クリアされるはずです。

3.入力検証とエラーメッセージをテストします。
不正文字を含む入力ミスをやってみてください。

StockWatcherにご入力してみる

ヒント:"リフレッシュ"を押せば、あなたのJavaコードに加えた変更は即座にブラウザに反映されます。もし開発モードが既に実行されているのであれば、再度実行する必要がありません。ブラウザのリフレッシュボタンをクリックすれば、アップデートされたGWTコードはリロードされます。

StockWatcherはまだ完成していませんが、最終状態をテストしたいなら、Run StockWatcherを御覧下さい。

次回のチュートリアル

この時点では、あなたはユーザが証券を入力する時のマウスとキーボードイベントのためのイベントハンドラインターフェースを実装しました。Stockwatcherは入力を検証してレスポンスします。

これで、あなたはテーブルに株を追加し、削除のためのボタンを提供するためのクライアント側のコードを実装するための準備を整えました。同じく、株価とデータ、そして最終更新の時の時間を表示するためのタイムスタンプを表示します。

→ステップ5:クライアント機能のコーディング

comments

Google Web Toolkit(GWT) 2.0入門チュートリアル日本語訳:4.クライアントのイベントの管理-1

Google Web Toolkit(GWT) 2.0の入門チュートリアルのリスト

スタート ガイド
1.GWT プロジェクトの作成-1
1.GWT プロジェクトの作成-2
2.アプリケーションの設計
3.ユーザー インターフェースの構築-1
3.ユーザー インターフェースの構築-2
3.ユーザー インターフェースの構築-3
4.クライアントのイベントの管理-1
4.クライアントのイベントの管理-2
5.クライアント機能のコーディング-1
5.クライアント機能のコーディング-2
5.クライアント機能のコーディング-3
6.GWT アプリケーションのデバッグ
7.スタイルの適用-1
7.スタイルの適用-2
7.スタイルの適用-3
7.スタイルの適用-4
8.GWTアプリケーションのコンパイル

前回はGoogleのGWT 2.0の入門チュートリアルの日本語訳(3-3)です。

今回は「4.クライアントのイベントの管理」の前半になります。

→http://code.google.com/intl/ja/webtoolkit/doc/latest/tutorial/manageevents.html

始まる前に、まず、お断りを…。

私は英語のネイティブでも日本語のネイティブでも、プログラミング言語のネイティブでもないので、私が訳したモノの正確性に関しては、全く責任を持ちませんし、これらのドキュメントによって、何かの損害を被ても、やっぱり何一つ責任を持つことが出来ませんので、読みに来られた方、すべて自己責任でお願いします。

GoogleののGWT規約によれば、GWTはGoogle製のサンプルなども含めて、著作権に関してはApache 2.0のライセンスを利用していますし、グーグルのチュートリアルについても、「クリエイティブ・コモンズの表示 3.0 ライセンス」でライセンスされていますので、翻訳しても、出典を知らせれば特に問題がないと認識しています。もし著作権法などに対し、何か問題がありましたら、ぉぅぇぃまでお知らせして頂けましたら、素早く適切に対処致します。

日本語訳なんですが、適宜にコメント、いわゆる「訳注」的なモノも入れます。訳注は(*…)のように表記します。可能な限りオリジナルとの区別をつけますし、間違いが出ないように注意しますが、漏れ・誤りがありましたらごめんなさい。

最後に、基本的にぉぅぇぃはEclipseを使っていますので、申し訳ございませんが、Eclipseと全く関係ない部分は飛ばすつもりです。

ステップ4:クライアントのイベントの管理

この時点では、あなたはインターフェースのすべての要素を作成した。多くのユーザインタフェースのフレームワークと同様、GWTはイベントベースです。つまり、何らかのイベントが発生する時に、レスポンスとしてコードが実行されます。多くの場合、イベントはマウスやキーボードを使ってアプリケーションインターフェースと相互作用するユーザに触発されます。

このセクションでは、あなたはマウスとキーボードイベントに応答・ハンドリングが出来るようにウィジェットを作り上げます。

1.イベントハンドリングの要件を検討します。

StockWatcherの要件を検討し、どのようなイベントが発生するかを検討します。

タスク:
 ユーザーが証券コードを入力します。
ユーザインタフェースイベント(トリガーメカニズム)
 Addボタンをクリックするか、入力ボックスでエンターを押す
レスポンス:
 ・入力を検証する
 ・株が既に存在しているかをチェックする
 ・新しい行を追加する
 ・削除用のボタンを生成する

タスク:
 ユーザがテーブルから株を削除する
ユーザインタフェースイベント(トリガーメカニズム)
 Removeボタンをクリックする
レスポンス:
 ・テーブルから一行を削除する

GWTは何種類かの異なるイベントハンドラインターフェースを提供していています。AddとRemoveボタンのクリックイベントをハンドリングするために、あなたはClickHandlerインターフェースを利用します。入力ボックスのキーボードイベントをハンドリングするために、あなたはKeyPressHandlerインターフェースを利用します。

GWT1.6からClickListenerとKeyBoardListerインターフェースは推奨されず、これらはClickHandler、KeyDownHandler、KeyPressHandlerとKeyUpHandlerインタフェースに代りました。

2.イベントをリスニングします。

イベントハンドラインターフェース

GWTのイベントは他のユーザインタフェースと同じく、イベントハンドラインターフェースモデルを採用しています。イベントを登録するために、あなたはイベントハンドラのインタフェースを適切なウィジェットにパスします。イベントハンドラインターフェースは一つかそれ以上のメソッドを定義し、これらはイベントが発生した時にコールされます。

マウスイベントをハンドリングする

マウスを使ってAddボタンをクリックするのはStockWatcherのユーザが証券コードを入力するための方法の一つです。

Addボタンのクリックイベントをハンドリングするために、それ(*イベント)をClickHandlerインターフェースを実装(implements)したオブジェクトにパスします。このケースでは、あなたは匿名の内部クラスを使ってClickHandlerを実装します。ClickHandlerインターフェースは「onClick」というメソッドを持っています。これはユーザーがウィジェットをクリックする時に発火(fire)します。

ユーザーがAddボタンをクリックしたとき、StockWatcherはレスポンスとして株式のテーブルにその株を追加するべきです。従って、このクリックイベントをハンドリングするために、addStockメソッドをコールします。あなたはまだaddStockメソッドを書いていませんので、ここではまずそれの土台を作り、次のセクションで実際にそれのコーディングを行います。

  1. Addボタンにイベントハンドラを追加し、クリックイベントを受け付けれるようにします。StockWatcher.javaの中、onModuleLoadメソッドに、下の強調された「// Listen for mouse events on the Add button」の部分のコードを貼り付けます。EclipseはClickHandlerにエラーフラグを立ち、インポートの宣言を行うことを提案します。
  2. ClickHandlerとClickEventのためのインポート宣言を付け加えます。EclipseはaddStockにエラーフラグを立ちます。
  3. StockWatcher.javaにaddStockメソッドの土台を作成します。EclipseでaddStock()メソッドを追加します。あるは下の強調されたコードを貼り付けます。

注意:Eclipseの設定により、addStockメソッドを作成する時、それはprotectedのアクセス属性が付与されるかもしれません。StockWatcherのサブクラスを作成する予定がありませんので、後でaddStockメソッドを実装する時、アクセス制限をprivateに変更します。


package com.google.gwt.sample.stockwatcher.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;

import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class StockWatcher implements EntryPoint {

private VerticalPanel mainPanel = new VerticalPanel();
private FlexTable stocksFlexTable = new FlexTable();
private HorizontalPanel addPanel = new HorizontalPanel();
private TextBox newSymbolTextBox = new TextBox();
private Button addStockButton = new Button("Add");
private Label lastUpdatedLabel = new Label();

/**
* Entry point method.
*/
public void onModuleLoad() {
// Create table for stock data.
stocksFlexTable.setText(0, 0, "Symbol");
stocksFlexTable.setText(0, 1, "Price");
stocksFlexTable.setText(0, 2, "Change");
stocksFlexTable.setText(0, 3, "Remove");

// Assemble Add Stock panel.
addPanel.add(newSymbolTextBox);
addPanel.add(addStockButton);

// Assemble Main panel.
mainPanel.add(stocksFlexTable);
mainPanel.add(addPanel);
mainPanel.add(lastUpdatedLabel);

// Associate the Main panel with the HTML host page.
RootPanel.get("stockList").add(mainPanel);

// Move cursor focus to the input box.
newSymbolTextBox.setFocus(true);

// Listen for mouse events on the Add button.
addStockButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
addStock();
}
});


}

/**
* Add stock to FlexTable. Executed when the user clicks the addStockButton or
* presses enter in the newSymbolTextBox.
*/
private void addStock() {
// TODO Auto-generated method stub

}


}

実装する時の注意:StockWatcherのような小さなアプリケーションでは、比較的に少ないイベントをハンドリングしますので、匿名インナークラスを使ったほうが、コーディングの労力を少なくできます。ただし、イベントを記述するためのイベントハンドラーの数が多い場合、大量の分断されたイベントハンドラーオブジェクトを生成しなければならないので、このアプローチは非効率になる可能性があります。そのようなケースでは、イベントハンドラインターフェースを実装したクラスを作成し、複数のイベント発生源からくる様々なイベントをハンドリングしたほうが良いでしょう。getSource()メソッドをコールすることで、イベントの発生源を見分けることができます。これはメモリーの利用効率を上げますが、わずかに多くのコードを要求します。コード例を知りたければ、開発者ガイドのEvent Handlers(*英語)を御覧下さい。

キーボードイベントをハンドリングする

Addボタンの利用だけではなく、StockWatcherのユーザは証券コードを入力した後、その手をキーボードから離さずに、入力ボックスでエンターを押すだけで処理できます。

キーボードイベントを記述するために、あなたは(KeyPressHandlerのための)addKeyPressHandlerメソッドをコールすれば、イベントをKeyPressHanlderにパスできます。

1.入力ボックス=newSymbolTextBoxのために、キープレスイベントハンドラを追加します。
onModuleLoadメソッドに、下の強調された「//Listen for keyboard events in the input box」部分のコードを貼り付けます。


// Listen for mouse events on the Add button.
addStockButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
addStock();
}
});

// Listen for keyboard events in the input box.
newSymbolTextBox.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getCharCode() == KeyCodes.KEY_ENTER) {
addStock();
}
}
});


}

/**
* Add stock to FlexTable. Executed when the user clicks the addStockButton or
* presses enter in the newSymbolTextBox.
*/
private void addStock() {
// TODO Auto-generated method stub

}

}

EclipseはKeyPressHandlerにエラーフラグを立ち、インポート宣言を付け加えることを提案します。

2.インポート宣言を付け加えます。


import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;

長くなりましたので、今回も分割します。

次回は「3.ユーザイベントにレスポンスする」に続きます。

comments