プロジェクトの作成」です。始まる前に、まずはお断り。私は英語のネイティブでも日本語のネイティブでも、プログラミング言語のネイティブでもないので、私が訳したモノの正確性に関しては、全く責任を持ちませんし、これらのドキュメントによって、何かの損害を被ても、やっぱり何一つ責任を持つことが出来ませんので、読みに来られた方、すべて自己責任でお願いします。ライセンス」でライセンスされていますので、翻訳しても、出典を知らせれば特に問題がないと認識しています。著作権法などに対し、何か問題がありましたら、ぉぅぇぃまでお知らせして頂けましたら、素早く適切に対処致します。日本語訳なんですが、適宜にコメント、いわゆる「訳注」的なモノも入れます。訳注は(*...)のように表記します。可能な限りオリジナルとの区別をつけますし、間違いが出ないように注意しますが、漏れ・誤りがありましたらごめんなさい。最後に、基本的にぉぅぇぃはEclipseを使っていますので、申し訳ございませんが、Eclipseと全く関係ない部分は飛ばすつもりです。プロジェクトの作成この時点では、あなたは最新版のグーグルウェブツールキットをダウンロードしたはずです。このセクションでは、あなたはEclipseのGoogleプラグインかGWTのコマンドラインユティリティwebAppCreatorでStockWatcherプロジェクトを作成します。これらのユティリティはスタートするためのサブディレクトリやファイルを生成してくれます。mode)で実行します。最後に、生成されたプロジェクトファイルを調査します。IDEに提供されているリファクタリング・コード補完、デバッグなどの機能を利用出来るのは、GWTを利用するメリットの一つです。このチュートリアルでは、我々はEclipseを利用します。それは広く使われていて、なおかつ無料です。自由にお好みのIDEを使ってもらっても構いません。GWTアプリケーションを生成するためのウィザードはEclipse用のGoogleプラグインに含まれています。スターターアプリケーションを生成する手順は以下のようになっています。ツールバーの「新規Webアプリケーション・プロジェクト」をクリックする。Webアプリケーション・プロジェクト」でもOK)プロジェクト名に「StockWatcher」を入力する。パッケージ名に「com.google.gwt.sample.stockwatche」を入力する。Webツールキットを使用」をチェックして、デフォルトSDKを使用します。Appエンジンを使用する」もチェックして、デフォルトSDKを使用してください。Eclipseをインストールする時にSDKをインストールしなかったら、「SDK構成...」をクリックして、GWT(必要ならばGAE)のSDKが置かれているディレクトリを指定してください。「完了」をクリックする。GreetingServiceImpl.javaGWTのRPCサンプルクラスgwt-servlet.jarGWTサーバーのランタイムライブラリStockWatcherTest.javaStockWatcherのためのスターターテストケース生成されるスクリプトbuild.xml開発モードでアプリケーションを実行するために、コマンドラインでGWTコンパイラを稼働させるためのAntビルドファイル(*Eclipseでやるときはあんまり関係ありません)生成されるEclipseファイル.project.classpathStockWatcher.launchStockWatcherTest-dev.launchStockWatcherTest-prod.launch更にプロジェクト構造に関する情報を知りたいなら、開発者ガイドを御覧下さい。Conventions.(*英語です)2.デフォルトのプロジェクトコンポーネントをテストする生成されたすべてのプロジェクトコンポーネントをテストすため、開発モードでスターターアプリケーションを実行します。ローカルの開発モードでは、あなたはデプロイ(*アップして、利用出来るように発行すること)した時と同じように、ブラウザでアプリケーションとインタラクト(*双方向の動作)することが出来る、エクリプスで開発モードコードサーバーを実行するパッケージエクスプローラビューで、StockWatcherプロジェクトを選択する。ツールバーで、「実行」ボタンをクリックし、「Webアプリケーション」で実行する。Mode」)のタブが開いたら、そこのURL(*「http://localhost:8888/」ではなく、こんな感じのやつ「http://127.0.0.1:8888/StockWatcher.html?gwt.codesvr=127.0.0.1:9997」)を右クリックし、コピーするこのURLをお好みのブラウザに貼り付ける。エクリプスを使わずに開発モードコードサーバーを実行する(略)開発モードコードサーバーに接続する。Mode)を一度スタートさせ、そのURLをブラウザに入力したら、ブラウザは接続を試みる。Pluginのインストールを促される。ページに表示された指示に従い、プラグインをインストールしてください。その後、ブラウザを再起動し、同じURLに戻って下さい。(*こんな感じの画面です、Operaには未対応とか...。)開発を始める前に、すべてのコンポーネントがインストールされ、設定されているかどうかをテストするために、GWTはスターターアプリケーションと共に出荷した。StockWatcherアプリケーションを書き始めたら、あなたはこのスターターアプリケーションのコードを書き換えて行く。長くなりましたので、二回に分けます。→「3.プロジェクトコンポーネントを調査する」はこちらです。Toolkit)を遊んでいます。「GWTの部分はちょっと引っ掛かりやすい...」ことですね。内容を再確認しようじゃないか〜っと思いました。それならば、ついでに勉強のメモを残そう...っと思ったワケですね。残念ながら現在は公式の日本語訳がありません。内容確認のため、日本語訳もやっていこうかな〜っと思いました。始まる前に、ちょっといくつか断っときます。私は英語のネイティブでも日本語のネイティブでも、プログラミング言語のネイティブでもないので、私が訳したモノの正確性に関しては、全く責任を持ちませんし、これらのドキュメントによって、何かの損害を被ても、やっぱり何一つ責任を持つことが出来ませんので、読みに来られた方、すべて自己責任でお願いします。ライセンス」でライセンスされていますので、翻訳しても、出典を知らせれば特に問題がないと認識しています。著作権法などに対し、何か問題がありましたら、ぉぅぇぃまでお知らせして頂けましたら、素早く適切に対処致します。日本語訳なんですが、適宜にコメント、いわゆる「訳注」的なモノも入れます。訳注は(*...)のように表記します。可能な限りオリジナルとの区別をつけますし、間違いが出ないように注意しますが、漏れ・誤りがありましたらごめんなさい。最後に、基本的にぉぅぇぃはEclipseを使っていますので、申し訳ございませんが、Eclipseと全く関係ない部分は飛ばすつもりです。GWTを始まる前に、まず環境を整える必要があります。GWTの導入については日本語訳されていますので、そちらを参照してください。IDEは自分でどうにかしてください...。ガイド)」から行きます。ガイドはじめにこのチュートリアルでは、あなたは簡単なAJAXアプリケーション、「StockWatcher(株式ウォッチャー)」を書きます。StockWatcherを使ってみて下さい。いくつか証券コード(Symbol)を追加(Add)し、挙動を確認してみてください。(*操作可能なStockWatcherの完成画面はこちら)StockWatcherを構築していくプロセスの中で、あなたは、GWTが提供したツールを使って、以下のことを実現するための方法を学びます。お好みのJavaのIDE(統合開発環境)でウェブブラウザアプリケーションを書くGWTの開発モードでJavaをデバッグするあなたのJavaコードを高度な最適なされたJavascriptにクロスコンパイルする。一種類のコード(Java)だけを保守しながら、複数ブラウザ向きの実装(Javascript)を実現するGWTを利用したAJAXアプリケーションの開発プロセスこのスタートガイドチュートリアルは典型的なアプリケーション開発サイクルに沿って、8つのセクションに分けられている。何れのセクションも、その前のセクションの成果を基づいています。(*順番通りでやらないと行けないので、飛ばさないでくださいってことです。)ここ(スタートガイド)のStockWaterの基本的な実装では、すべての機能はクライアントサイドのものです。サーバーサイトのコーティングやクライアントサーバー間の通信については、他のチュートリアルに含まれています。各セクションの内容は以下の通り。widgets(ウィジェット)とパネル、ルートパネル4.クライアントのイベントの管理マウスとキーボードのハンドリングClickHandler(クリックハンドラー)とKeyPressHandler(キープレスハンドラー)インターフェース5.クライアント機能のコーディング一種類のコードだけを保守しながら、複数ブラウザ向きの実装を実現する。アプリケーションのデバッグJavaScriptにコンパイルする前にJavaコードをデバッグする。IDEのデバッグツールを利用する開発モード7.スタイルの適用アプリケーションに視覚スタイルを追加する。CSS(スタイルシート)の中に視覚スタイルを定義する。プログラムでHTML要素にクラス属性を設定する。スタイルをダイナミックに変える。これらはイメージファイルのような静的要素も含む。アプリケーションのコンパイルあなたのクライアントサイドのJavaコードをJavaScriptにコンパイルする。製品モードでテストする。遅延バインディングのメリットを学習する。Toolkit)を揃ってないのであれば、まずはそれを整えましょう。次はGWTのプロジェクトの作成です。twleeway返信KCGブログの開発元は、余所のために開発したブログエンジンを元に、KCGのために修正・機能追加しました。元々のブログエンジンにはAmazonアソシエイトの機能が付いていました。残骸は残骸なんですが、わざわざ削除するのもなんだし、そのままKCGブログでも使えるようにしたそうです。疎いもんで、これを読んでも何がどう変わったのはよくわかりません...。いうか、内容をアップデートして、違う部分を赤くするとか、そういう分かりやすさがあると嬉しいだけどね...。本当にわかりにくいのです。非常に大雑把ですが、一応の対応表を作ってみました。精査すると、色々変わってくるかもしれません。面白いと思ったのは、「2.加入申し込み」に追加された(g)ですね。ソーシャル・ネットワーキング・サイト上で、アマゾンまたはその関連会社の商標をユーザ名、グループ名、またはその他の識別子に含むサイト。You」などのユーザ名は不適切となります。今はSNSのユーザ名もダメになりました。へぇ〜ソーシャル・ネットワーキングの時代だな〜〜ですね。Toolkit)の話。ここ数日、Slim3やらドラッグアンドドロップやら、色々試してみましたが、ちょっと原点に戻ろうかと思います。Google製の「GWT」ですね。Toolkitについて、グーグル様によれば...。アプリケーションの作成は、面倒でエラーの発生しやすいプロセスです。時間をブラウザ固有の動作への対処に費やすことがあります。もろくなりやすく、困難です。使用するとさらに便利です)。アプリケーションをすばやく作成し、管理できるようになります。Javaで書いて、そしてGWTのエンジンでそれをJavascriptというか、AJAXなコードを生成してくれるものです。要するに、リッチなクライアントのインタフェースを作ってくれる...のです。サーバー(GAE/Jの場合はJava)とクライアント(AJAX)の間に、データをやり取りするためにいくつかの手段が用意されています。padding)で受け渡す。RPC」が好きなんですね。汎用性が高いし、オブジェクト指向的にも、こっちのほうが色々強固なシステムを構築出来そうなんですね。最近はこのパターンでちょっとハマっていましたので、ちょっと簡単に感想や所見を述べたいと思います。RPCはオブジェクトをシリアライズして受け渡しをしている...わけなんですが、すべてのクラスをそれで受け渡せるワケではありません。サーバー側は、要するにJVMが回っていますので、基本的に何でもOKで、それといった制限がありません。「何から何まで」のライブラリを対応しているわけではありません。クライアント側に処理出来ないクラスを渡しても、クライアント側はうまく捌けない...のです。従いまして、クライアント側に「処理出来無さそう」なクラスをアクセスしようとしたら、GWTコンパイルの時、こんな感じのエラーが出ます。必要なモジュールを継承(?)してください...ということですね。「クライアント(GWT)⇔サーバ(GAE)⇔データベース(Datastore)」。困ったことに、GWTとDatastoreの制限は必ずしも一致していないのですね。Datastoreには使えるのに、GWTには扱えない、GWTには扱えるのに、Datastoreには扱えない...のようなケースがあります。Datastoreのほうには、GAEのために用意されたUserクラスを保存出来ますが、(*com.google.appengine.api.users.User)デフォルトのGWTはそれを対応していませんので、UserのインスタンスをRPCでGWT側に送ろうとしたら、エラーが出ます。両方同時に扱えるクラスしか使わないようにする方法もありますが、いろいろ制限が多いのですね。その他、その差異をサーバー(GAE)に吸収させる方法もあると思われます。何かしらのクラスやデータの変換を行ってから永続化(格納)する。Datastoreから取り出したデータオブジェクトも、そのままGWTに送るではなく、何かしらの変換を行ってからクライアントへ...ですね。GWTのほうに色々なクラスを扱いたいのであれば、それをGWTの設定ファイルである◯◯.gwt.xmlの中に記述する必要があります。「User.gwt.xml」ってファイルを確認することが出来ます。継承している...って感じだけどね。ちなみにこんな感じです。無かったら自分でモジュールを作ったり、いろいろやらないと、クライアント側には扱えない...ということですね。詳しく成ったら、何かしらの記事を書きたいと思います。ちなみにGWTのプロジェクトはデフォルトに、client、server、sharedの三つのパッケージがあります。クライアント関連のものはclient(設定すればsharedも)パッケージの中に入れるようにしたい。分かりやすい...のような気がします。意識せずに適当にやったら、色々とエラーに悩まされてしまいますね。path」で設定できます。GAE/Jにしても、GWTにしても、チュートリアルに沿ってやったら、そのお気楽さとパフォーマンスに感動するばかりですが、お気楽モードでいじりまわすと、あっちこっち引っかかってしまいますね。う〜む、まずは正しい理解、これ大事ですね。真面目に勉強しないと!また色々触っていきます。コメントを残す今日は力尽きた...。今日はちょっと力尽きました...。現在実験中のプロジェクトを一度あきらめ、まっさらな状態から作り直すことに決意しました〜ちなみに、敗因は3種類のチュートリアルで作ったコードを(*GAE/J、GWT、Slim3)無理やり一つにまとめようとしたところ...ですね、多分。プロジェクトもまたがっていましたので、設定がエライややこしいことに...。楽しいけど疲れた...というわけで、今日は手短に...。JavaとGWTを色々試す。GAE/Jは普通のRDBMS(リレーショナルデータベース管理システム)を使えずに、Google特有のBigTableというデータベースシステムしか利用できません。API)を推奨しています。ここ数日、グーグルのチュートリアルに沿って、JDOを使って来ましたが、クエリの書き方など、色々調べていましたら、JDOはグーグルに推奨されていますが、どうもクエリとかのパフォーマンス的にあんまり良くない...らしい。(実はあんまり深く理解していないのですが)、Slim3のDatastoreがイイ...という噂を聞きつけました。赤い彗星並に、JDOの3倍以上早いらしい。おすすめそれならばオラも...ということで、チャレンジしてみました。ちなみに、Slim3と言うのはGAE/Jに向けて最適化したMVCフレームワークです。Datastoreはそのフレームワークの中の一部ですね。フレームワークを丸ごと使うかどうかは要検討...ですが、データアクセスが早いのは嬉しいので、とりあえずDatastoreだけを使ってみようかと。仕組みも自然で分かりやすいし、クエリ出来るパターンのバリエーションも多く、なかなか良いらしい。Datastoreの日本語訳で、チュートリアル(英語)の通りにやると、...いきなり上手くいかない。こんな感じのエラーが出て、うまくビルドが出来ないのです...。JVM色々調べると、どうやらこれはMac特有で、32-bitの環境と64-bitの環境が混在している問題らしい。32bitとEclipse32bitを使っているかを確認してください。)なんか32bitのjavaとEclipseをオススメとか。調べると、Java6は対応していないから、Java5をダウンロードすれば解決できるとか、そういう解決法がありましたが、Java5を使ってもなんだか上手くいかない。調べると、これは32bit版のEclipseの問題で、64bit版のEclipseを使えば、問題を解消出来る...ことが分かりました。JVMで、自分が使っているEclipseは32bitなのか64bitか分かりませんので、とりあえず64bit版をダウンロード、展開してみました。ちなみにEclipseを実行してみると、元々のは32bitってことが分かりました。」のやつを選べばよいかと。ファイル名はこんな感じです。bitのEclipseを使えば、ビルドが出来るようになりましたので、チュートリアルを一通りやってみました。大きな問題が無かったです。Toolkit)との連動ですが、ここにも問題が...。コンパイルすると、エラーが出ます。↓Eclipseで出されるエラー画面エラーメッセージはこんな感じです...。module?で、いろいろ調べると、GWTを利用する際、基本的にclientパッケージ内のクラスは、clientパッケージ内のクラスしか利用出来ない...らしい。(場合によってsharedパッケージも行ける。)それならば、データのクラスをshared.modelの中に移動させました。これでイケる!っと思いましたが、そうしたら、こんな感じのエラーが出るようになりました。module?このエラーメッセージで検索しても、なかなか解決策にたどり着きませんでした...。対応外のライブラリを利用しようとしたら、弾かれてしまうのですね。一応、インクルードするために、inheritsに何かを追加しないと行けないのですが、その書き方がよく分からない...。いや、他の例を見れば、書き方は分かるのですが、なにをインヘリタンスすれば良いのかわからんのじゃ。根気よく色々探し回りましたら、ようやくGWTでslim3を使うための設定法と出会いました。追記」の部分で対策法が書かれていました。{プロジェクト名}.gwt.xmlのファイルに、こんな感じの一行を追加すれば行けます。/>の前後でOKです。上記の「Slim3でGWTのブランクプロジェクトを作る手順」に沿って、Eclipse+GAE/J+GWT+Slim3のための環境を設定し直しました。したら、エラーも無く問題無くいろいろ実行出来ました!これでおらもシャア並の三倍速をゲットだぜ!いやいや、今回は超ハマってしまいました。GWTの仕組みへの理解が不十分のは一番大きかったのですが、ドキュメントになかなか辿り着け無かったのもしんどかったですね〜まあ、理解が不十分なので、こんなエラーが出たのはぉぅぇぃくらい...ってことかしら。GAE/JとGWTを色々触ってみて、そのポテンシャルを感動しているところです。インストールして、グーグルが用意したチュートリアルとドキュメントを沿って、GAE/JとGWTを一通り触りました。調べみましたら...出来るのですね...。いや、いつのまにこんな時代に成ってしまった...って感じです。恐るべし、クラウドコンピューティング。いうわけで、今日はちょこっと、GAE/J+GWT環境でドラッグアンドドロップを実現している、gwt-dndライブラリを少々紹介します。(GWT)」、つまり「ドラッグアンドドロップライブラリforグーグルウェブツールキット」です。このライブラリを利用することで、GWTの上でドラッグアンドドロップが出来るように成ます。どんな感じなものなの?っと思う方も居るかも知れません。説明するよりも見たほうが早いと思いますので、まず下記のURLでデモを見てみて下さい...。DragHandleExample全部で13個のデモがあります。me!」をドラッグアンドドロップして遊んでみて下さい。スゴイでしょう...、簡単に出来るぜ、コレ...。ちなみに、GWTは基本的にajaxのツールキットなので、このgwt-dndも同じように、基本的にjavascriptで動かしています。GWTを利用するプログラマは基本的にjavascriptを触ることなく、javaのプログラムを書いてら、GWTが勝手にそれを適切なajaxのコードに変換してくれます。従って、javascriptの知識がゼロでも、javaさえ扱えれば、GWTとgwt-dndでリッチなドラッグアンドドロップも出来ちゃうのですね。一応のチュートリアル(英語)は、グーグル・コードにあります。application.一通りみれ、その通りにやれば、コンポーネント(Widgetのほうが妥当?)をドラッグアンドドロップしてみる...くらいはスグ出来るように成ます。ぉぅぇぃみたいな非プロのアマチュアプログラマが、ちょっとでも複雑なことをやろうとしたら、挫折しそうになってしまうのですね。いう時に、デモをローカルで実行してみて、そこのコードを見て、中身を読んで行けば、なんとなく使えるようになります。なんかこのデモをzipとかでまとめてダウンロード出来るように成っていませんので、ちょっと苦労しました。一応、gwt-dndのデモをローカルのGAE/J+GWTを実行したら、こんな感じの画面になります。5を単体で実行してみました折角だし、自分用のメモも兼ねて、このデモを自分のローカル環境で実行出来るまでの手順を残します。一応、既にGAE/Jの環境を整えていることが前提になります。後、テスト用のプロジェクトが既に作成されていることも前提ですね。大量のgwt-dnd-?.?.?.jarファイルがあります。自分のGWTバージョンに合うモノをダウンロードしてくださみ。ぉぅぇぃがGAE/JとGWTを入れたのはここ数日のことなので、GWT2.0に対応しているgwt-dnd-3.0.0.jarをダウンロードしました。2.ライブラリをビルド・パスに入れるJavaのビルド・パスに、この「gwt-dnd-?.?.?.jar」を指定します。Eclipseの場合は、「プロジェクト」に右クリック→Javaのビルド・パス→外部JARの追加→「gwt-dnd-?.?.?.jar」を選びます。3.デモのダウンロードまず、下記のURLを読んでみて下さい。ぉぅぇぃは、このページを読まずに、デモページから勝手にコードを漁ったので、大変なことになりました...。Eclipse(英語です。)意味が理解出来ない方は、手動で一つ一つ自分で落として行く必要があります。コードは場所は、下記のURLで確認出来ます。demo基本的に、この下のモノを全部落として行けば良いのですが、なにせ、ファイル数が非常に多いので、一つ一つ落として行くのはかなり大変。必要最小限のファイルをまとめてみます。com.allen_sauer.gwt.dnd.demo/DragDropDemo.gwt.xmlcom.allen_sauer.gwt.dnd.demo.client/DemoDragHandler.javacom.allen_sauer.gwt.dnd.demo.client/DragDropDemo.javacom.allen_sauer.gwt.dnd.demo.client/ExampleTabPanel.javacom.allen_sauer.gwt.dnd.demo.client/RedBoxDraggableWidget.javacom.allen_sauer.gwt.dnd.demo.client.example/DraggableFactory.javacom.allen_sauer.gwt.dnd.demo.client.example/Example.javacom.allen_sauer.gwt.dnd.demo.client.example.insertPanel/InsertPanelExample.javacom.allen_sauer.gwt.dnd.demo.client.example.insertPanel/VerticalPanelWithSpacer.javacom.allen_sauer.gwt.dnd.demo.client.ui/MultiRowTabHistoryTokens.javacom.allen_sauer.gwt.dnd.demo.client.ui/MultiRowTabPanel.javacom.allen_sauer.gwt.dnd.demo.client.ui/StylableVerticalPanel.javacom.allen_sauer.gwt.dnd.demo.client.util/GWTUtil.java基本的に、設定ファイルの「DragDropDemo.gwt.xml」は当然必須で、uiパッケージ、utilパッケージ、exampleパッケージ直下のすべてのファイルも必要です。その他の部分は、実行したいDemoによって変わってきます。このデモの全体の構造ですが、gwtのEntryPointをimplementsした画面全体のクラスはDragDropDemoです。その中に13個のデモのパネルを入れています。タブを使って切り替えるようにしています。これらのクラスは、uiやutilのクラスを利用しています。5の場合はInsertPanelExample)も、com.google.gwt.user.client.ui.SimplePanelを継承したExampleクラスをさらに継承しています。実際に各デモの動作を記述したクラスは、com.allen_sauer.gwt.dnd.demo.client.exampleの下の各パッケージの中の◯◯Exampleになります。Javaクラスのダウンロードはこんな感じでOKですが、これらのクラスと連動するhtmlとcssも落とす必要があります。これらは、下のURLから取得しましょう。svn/ここからDragDropDemo.htmlとDragDropDemo.cssをダウンロード。DragDropDemo.htmlの中に、グーグルアナリティクス用のコードも入っていますが、これは消してしまいましょう。具体的に言うと、39行から47行ですね。4.ソースコードを微調整する。豪快に全部コメントアウトしてしまいましょう。ちなみに、いじらないと行けないのはDragDropDemoだけです。↓こんな感じでコメントアウト↓さらにコメントアウト↓もっとコメントアウトまあ、Eclipseの場合、エラーが出ているところをちょこちょこ対処すればよいかと。5.デモのビルドwarの下のdemoフォルダを生成するために、ビルドする必要があります。勝手にビルドのための設定してくれます。「プロジェクト」に右クリック→Google→Webツールキット→エントリー・ポイント・モデル→追加で「DragDropDemo」を追加して下さい。(わざわざ説明するのもアレなんですが、)ビルドの方法は、Eclipseの場合は、「プロジェクト」に右クリック→Google→GWTコンパイル6.デモを見てみる。普通にGAE/J+GWTを実行してみる。(「プロジェクトを右クリック→実行→Webアプリケーション」とか)下のような感じのURLで確認出来ます。http://localhost:8888/DragDropDemo.html↓実際の画面はこんな感じ7.コードを読んだり、いじったり、お好みでどうぞ。5の場合は、主にinsertPanelExampleを見たら良いかと思います。こんな感じで調整してみるとか。・挙動を確認するためのTESTボタンを追加してみたり...。↓しょうもないテストをしてみました。本当にしょうもないけど、いろいろいじってみたら、結構理解出来ちゃうもんですね。っとこんな感じですね。本当にスゴイですね、コレ。間は飽きそうもないので、またちょこちこと関連の話をしたいと思います。Engineで色々遊んでいます。API"をチャレンジしてみました。Engine用のサンプルとかを置いていませんが、Java開発者用向きのサンプルコードをリリースしています。具体的に言うと、サンプルコードの「ItemLookupSample.java」と、アマゾンへのリクエストを補助するための「SignedRequestsHelper.java」ですね。ソースコードのファイルそのものは、下記のURLから取得出来ます。自分でリクエストをAmazonに送信するコードを書く必要があります。Engineで使いところ...ですが、ちょっとした修正を加える必要があります。このまま使おうとしたら、こんな感じのエラーが出ます。Toolkit)も使っていたので、そこにうまくリフレクションが出きなかった...のような気がします。ネットでいろいろ調べましたが、どうも今ひとつパッっとした解決策が見つからず。自分でEclipseで色々試しましたら、GAE/Jのパッケージの中に、専用のBase64クラスがある...っと気づきまして、これを使ったら、問題はアッサリ解決出きました。解決法をメモを兼ねてここに書き残します。org.apache.commons.codec.binary.Base64;」で、apacheコモンズのcodecの中のBase64を使っていましたが、これをGAE/Jのやつで置き換えます。具体的に言うと、こんな感じです。stringToSign)メソッド内の記述も変更します。String(encoder.encode(rawHmac));これをこんな感じで一行に書き換えます。APIへ問題なくリクエストを出すことが出きました。コードをいじっていましたら、「SignedRequestsHelper.java」のほかにも、いろいろ発見がありましたが、別の機会がありましたら、またちょこっと話をしたいと思います。それにしても、GAE/Jのチュートリアルとドキュメントは素晴らしいですね...。テキストも参考書も要らずに、チュートリアルに沿ってやるだけで、いろいろ理解してしまいます。大半の問題は、ドキュメントやFAQで解決できてしまいます。いうか、本屋でGAE/Jの本も何冊立ち読みしてみましたが、グーグルのドキュメントのほうがずっと良かったね。こんなのウェブ上で公開していたら,そりゃ出版社はピンチになりますね。ガイドしかし、パソコンでこういうドキュメントを読んでいると、やっぱりちょっとつかれるな〜って感じになりますね。目とか肩とか...ね。コメントを残す滋賀県草津のスーパーハズイ西店に行きました。今日はひょんなことで、草津に行く用事がありました。ひょんなことで、最近ちょっと噂に成っている「スーパーカズイ」の西店に行きました。私のは別にスーパーハズイに用事がないので、ちょっとふらふら〜っと回って、視察(?)をしてみました。スーパーハズイに関する基本知識を...。謳い文句は「関西圏で一番忙しいスーパー」だそうです。中に入ってみると、確かに、普通のスーパーではありえないような数の客が居ました。レジ前は常に行列が出来ていて、10人待ちは当たり前...って感じですね。この人気の秘密...ですが、生鮮食品や野菜に対す徹底的な鮮度の管理と、そして、その生鮮食品や野菜の価格を極力安く抑える営業努力ですね。近所の格安スーパーよりも、全体的に20%ほど安かったですね。葉物野菜は何れも確実に安かったです。白菜やネギとか、なんかほぼ半額の値段にビックリしました。鮮度ですが、今日見た感じでは、何れも瑞々しく、どれも非常に美味しく見えました。スーパーハズイを常用している知人の話によれば、このスーパーは、基本的に「売り残しゼロ」を目指しているそうです。その日が終わるまでに売り切るようにしっているそうです。夜に成ったら全品割引は当たり前、閉店直前の「持ってけ泥棒セール」もやりますし、それでも売れなかったモノは、従業員らに格安の値段で全部買ってもらうそうです。「毎日新鮮で美味しい」→「人が満杯」→「常に売り切れる」→「毎日新鮮で美味しい→...という、非常にプラスなスパイラルに入っている...だそうです。値段も確認しましたが、ここは「全品安い」...というワケではなさそうです。普通のスーパー並で、いわゆる格安スーパーよりもちょっと高いのですね。利幅が比較的に良いとされている普通の食品なども抱き合わせて買ってもらって、それでうまく利益を得ているような気がします。客側は安くて新鮮な食材をゲット出来て、win-winに成っています。実際にヒアリングとかをやったわけではなく、想像なんだけどね。最後に、知人に教えてもらいましたが、レジカウンターに居る元気なおばさんがこのスーパーのオーナーだそうです。組織の運営に良い影響を与えているような気がします。ここもこのスーパーの人気の秘密が隠されているかもしれません。いやいや、私が日本に来てから、これほど活気のあるスーパーを見たのは初めてです。真面目にやれば、経営学的にも、いろいろとケーススタディに成り得るような気がします。機会がありましたら、是非自分の目でこのスーパーハズイを見てもらいたいですね。経営・マネジメントを意識したら、より楽しめるじゃないかと思います。前から知っていましたが、一昨日くらいから、ちょこちょこ色々試していました。Java)で遊んでいます。いや、楽しいね!コレ。言え、コレの話を記事にするほどの知識はありません...。基本的なところでハマルハマル...。コレばかりやっていますので、ブログの記事を書く余力はあんまりありません...。この分だと、いつか何かを紹介する日がやってくると思いますが、GAE/Jの話はまた今度で!それにしても、無料でここまで出来るとは...、ほんま、時代が変わりましたね。OECDの相対的貧困率とはなんぞや?軽く調べて簡単に説明します。