Hatena::ブログ(Diary)

やさしいデスマーチ このページをアンテナに追加 RSSフィード

札幌のWebエンジニアの綴る日常と開発の日々。
GoogleAppEngine/slim3/Django/NetBeans/Swing/JavaFXを中心にお届け。

2010-06-30

オープンソースカンファレンス2010 北海道レポート

| 23:16 |  オープンソースカンファレンス2010 北海道レポートを含むブックマーク

報告が遅れましたが、オープンソースカンファレンス2010 北海道に参加してきました。今年のOSCでは、札幌Javaコミュニティとしてセミナー参加を行いました。北海道では初のセミナー参加*1です。幾つか参加した他のセミナーを中心にレポートとしたいと思います。

つらつらと感じたことを書き残しておきます。

GAE/PythonおよびWebアプリケーションフレームワークweb2pyについて

とりあえずGAEネタが聞きたいと言うよりは午後からGAEネタを話すので、どんな事を話すのかな?という感じで潜入しました。内容としてはGAEの概要、Python自体のこと、最後にweb2pyの紹介とい感じで初心者向けの内容だったと思います。参加者は半分くらいがGAEのことを知っていたようなのでちょっと物足りなかったのではと感じました。

HTML5 - 新しい技術と新しいウェブ - 

この日の最人気だったセミナーHTML5の話です。なんだかんだと、デザイナ側の人もプログラマ側の人も両方が興味を持つ所なので集客力は凄いですね。

内容としてはHTML5の定義範囲などの説明とブラウザベンダ)によって色々と独自拡張をHTML5に含めて宣伝しているので注意してねという話、それからHTML5を使ったデモなどでした。Mozillaセッションゆえに終始Firefoxマンセーな感じを受けましたが、非常に良くまとまった内容で勉強になりました。とはいえ、45分しかないので仕方ないですが、ちょっと物足りないかなという感じです。8割くらいは知っていることでしたが、クラウド上で使うヒント的なものも得られました。

Google App Engine /Java アプリケーション開発

自分のセッションです。内容はこちらでスライドを公開しているのでご覧ください。

参加者は50名強と旬のネタを持ってきた甲斐がありました。参加していただいたみなさま、ありがとうございます。ちなみに最初にGAEを使った事があるかと聞いたところだいたい半分くらい、slim3を知っているかに関してはその半分くらいでした。

尚、今年のテーマである「次の一歩」ということでAppEngine ja nightを札幌で開催したいと宣言したりしています。

オープンソースクラウドを喰らうど!

タイトルは意味不明(笑)ですが、Hadoopセミナーということで参加してみました。内容としては初心者向けにクラウドSaaSやPaaSなどの定義とか云々)の解説、セキュリティに関すること、オマケ的にHadoopといった内容です。初心者向けとなっていたので、大きな期待はしてはいなかったのですが、もう少しHadoopの事をメインに聞きたかったですね。

LT

本来はLTをする予定ではなかったのですが、昼くらいに「欠員出たのでやりません?」と振られ、振られたからにはやるしかないと準備して突撃しました。内容はやはりGAEネタです。AppEngine Peopleで日本人多いよとか「圧倒的ではないか(by @higayasuo)」の話、Ktrwjr(ことーじゃ)の紹介などを行い、AppEngineが日本で盛り上がっているよという内容です。他のLTに比べたら真面目系でつまらなかったかもしれませんが、札幌でもっとAppEngine盛り上がろうよということで許してください。

その他

道外から来られたゲストにとっては折角北海道に来たのに糞暑い日でした。また、今年のOSC北海道は450名の動員ということで、なんと地方のOSCの中では最高記録を更新ということです。この辺り、札幌は凄く活気あるなと常々思います。ただ、継続的にやったり旗振ってやろうという人が少な目なのがちょっと残念です。そんな中、Perlコミュニティが立ち上がり、今年からはPerlも札幌近郊で勉強会が開催されていくと、消えていく勉強会あり、新たに立ち上がる勉強会ありと、また少し動きが出てきているのではないでしょうか?

また、運営を行っているLocalさんも板についてきたというか、貫禄が出てきたというか、素晴らしい組織になっているように感じました。特に学生を中心に若い世代が動いているのが目に見えてきて良かったと思います。去年感じた強い内輪感(受付だから最初の印象大事ですね・・・)もなかったと思います。ですが、動員が450名、懇親会にも100名超、自分は1次会で撤収しましたが2次会に60名近くとちょっと考えられない規模になってきているなぁと感じました。

最後に

来年のオープンソースカンファレンス合わせで北海道に来ましょうw

*1:去年の沖縄が初参加!?

2010-06-26

Google App Engine アプリケーション開発

| 15:17 |  Google App Engine アプリケーション開発を含むブックマーク

オープンソースカンファレンスにて札幌Javaコミュニティ枠で、GAEセッションを行いました。内容としては、GAEの特徴についてと、slim3の紹介、spin-upとDatastoreのTipsという構成です。45分しかないので駆け足になってしまいましたが、なんとか(3分程度ロスタイム)まとまった感じ。

というわけで、資料をあげておきますね。

2010-06-24

Eclipse Helios is here

| 21:23 |  Eclipse Helios is hereを含むブックマーク

最新版のEclipse、Heliosがリリースされています。

どうですか、この神々しい色!

f:id:shuji_w6e:20100624211611j:image

2010-06-15

static-filesがどのくらい早いか検証してみた

| 22:15 |  static-filesがどのくらい早いか検証してみたを含むブックマーク

Google App Engine/Javaではデプロイしたファイル郡から静的なリソースに関して、appengine-web.xml で定義することにより特別な扱いにすることができます。静的ファイルに設定したリソースURLウェブアプリケーションにリクエストが来ません。ドキュメントによれば、別サーバで管理しているようです。

ではどのくらい効果があるのでしょうか?20KBほどのファイルを設置して試してみました。

まず、静的ファイルに設定した場合、

06-15 05:36AM 12.027 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 12.027 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 12.027 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 10.716 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 10.716 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 09.411 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 09.411 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 08.100 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 08.100 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 06.792 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

06-15 05:36AM 06.792 /static/index.html 200 1ms 0cpu_ms 0kb gzip(gfe)

次にstatic-filesには指定せずにServletFilterを素通りさせた場合、

06-15 05:35AM 22.060 /index.html 200 38ms 38cpu_ms 20kb gzip(gfe)

06-15 05:35AM 20.723 /index.html 200 22ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 19.404 /index.html 200 19ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 18.090 /index.html 200 18ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 16.761 /index.html 200 18ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 15.417 /index.html 200 25ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 14.098 /index.html 200 15ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 12.774 /index.html 200 24ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 11.452 /index.html 200 20ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 10.135 /index.html 200 18ms 0cpu_ms 20kb gzip(gfe)

06-15 05:35AM 08.821 /index.html 200 16ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 07.500 /index.html 200 19ms 19cpu_ms 20kb gzip(gfe)

06-15 05:35AM 07.500 /index.html 200 19ms 19cpu_ms 20kb gzip(gfe)

と、処理時間に関してはstatic-filesに設定する方が20〜40倍ほど早いですが、数十ミリ秒のオーダーなのでそこまで気にしなくてもいいのかもしれません。ですが、CPU時間の方はstatic-filesにすると0ms、つまり課金の対象からはずれ、アプリケーションで処理すると少しだけですがCPU時間を消費するということです。これは塵もつもれば…と考えて、有効に使うべきと考えてよいでしょう。

mod_rewriteが欲しい件

と、なんでこんなことを調べていたかというと、etupirkacmsでテンプレートの切り替えをどう実装しようか?という問題です。CMSというからには幾つかのテンプレートを切り替えられるとそれっぽくなります。なので、war配下にテンプレート用のディレクトリを作り、ディレクトリごとにテンプレートを管理しようと考えています。例えばこんな感じ。

/war

+ /templates

+ /pattern_a

+ + index.html

+ /pattern_b

+ index.html

これらのテンプレートを編集する場合、どうしても静的ファイルは/pattern_aをルートに設置したいです。理由はブラウザプレビューが簡単に出来ることと、Dreamweaverなどのツールを使うからです。しかし、つぎのようにstaticファイルを配置した場合、アクセスするには/warからフルパスで指定しなければならなくなります。

/war

+ /templates

+ /pattern_a

+ + index.html

+ + /static .. CSSなど

+ /pattern_b

+ index.html

+ /static .. CSSなど

となると、動的なファイルとして扱うしかない・・・のかな、ということです。簡単にURLパターンを定義できるような仕組みがAppEngineでも欲しいところです。

他の解決方法としては、静的ファイルは/staticで固定、すべてのテンプレートで共通!という感じですが、あまりいけてないですねorz

なにか解決方法があれば教えてください。

2010-06-13

開発サーバとプロダクション環境でログの設定を切り替える方法

| 10:37 |  開発サーバとプロダクション環境でログの設定を切り替える方法を含むブックマーク

Google App Engine/Java(以下GAE)で開発をしていてはまったのでメモ。

GAEで開発するならばEclipseを使うかと思いますが、GAE Plugin は必要最低限の機能を提供している感じです。したがって、プロダクション環境にアップロードされる形を意識しながら開発もしなければならないです。ほとんどの場合はそれはあまり問題になりませんが、開発サーバとプロダクションサーバで設定を変えたいような場合に苦労します。そうログの設定とか。

よく行うパターンとしては、開発サーバ用のlogging.propertiesを用意しておき、

1. プロダクションサーバデプロイしないようにデプロイの設定を行う

2. 開発サーバの起動オプションなどで設定を行う

3. プログラム上で自動的に判別して設定を行う

の3パターンが解決策として考えられます。

一番スマートな方法は1ですが、EclipseGAE Pluginで対応していないため、自分でAntMavenの設定を書く必要があります。書けばいいんですけど、Eclipse上で開発を完結したいところ。

次に3ですが、GAEの場合、spin-upの問題もある為、不要な処理は可能な限りやりたくないです。特に開発サーバだけで動くような処理については避けられるものならば避けたいところ。メリットが多ければいいのですが、そこまで・・・という気がします。

というわけでなんとか、2の開発サーバの起動オプションでどうにかしたいわけです。

デフォルトではGAEでログの設定を行うにはappengine-web.xml で設定します(抜粋)。

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">

<system-properties>

<property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties" />

</system-properties>

</appengine-web-app>

java.util.loggingを使ったことがある人ならばピンときますが、これはVMの起動引数で与える形式です。したがって、以下のように設定しても動くだろうと予想できます。

java -Djava.util.logging.config.file=WEB-INF/classes/logging.properties ....

結論としては動くのですが、ここでlogging.propertiesをコピーして使うと自分のようにはまります。

一方、logging.propertiesは概ねこんな感じにログのレベルが指定されています。

# A default java.util.logging configuration.

# (All App Engine logging is through java.util.logging by default).

#

# To use this configuration, copy it into your application's WEB-INF

# folder and add the following to your appengine-web.xml:

#

# <system-properties>

# <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>

# </system-properties>

#

# Set the default logging level for all loggers to WARNING

.level = INFO

# Set the default logging level for ORM, specifically, to WARNING

com.google.appengine.repackaged.level=WARNING

コメントにもappengine-web.xmlでしてくれと書いてあるのが解りますね。

これをlogging.dev.propertiesにコピーしてINFOをFINEにして、WebApplicationのVM起動引数に「-Djava.util.logging.config.file=WEB-INF/classes/logging.dev.properties」を追加します。が、・・・・ログがまったく表示されませんorz

正しい設定方法

実はappengine-web.xmlでの設定の場合、logging.propertiesが単純に読み込まれて使用されるわけではないようです。Handlerなどの設定を追加した上で反映される為、設定ファイルをそのまま使うことに問題があります。したがって、logging.dev.propertiesにHandlerの記述が必要です。

# A java.util.logging configuration for development server.

.level = FINE

# handlers

handlers= java.util.logging.ConsoleHandler

java.util.logging.ConsoleHandler.level = FINE

com.google.appengine.repackaged.level=INFO

org.slim3.level=INFO

後はVM起動の引数に「-Djava.util.logging.config.file=WEB-INF/classes/logging.dev.properties」を追加すれば開発サーバでは詳細なログを表示できます。

尚、war内のどこにlogging.dev.propertiesを設置しても構いませんが、パスはwarからの相対パスで書くこととWEB-INF以下に配置しなければ外部に見えてしまう可能性があることを忘れないようにしてください。個人的にはslim3と同様にclassesに配置し、本体はsrcフォルダに置くことをオススメします。

尚、slim3 1.03以前のBlankプロジェクトではtestフォルダにlogging.dev.propertiesを配置すると、ビルドしたクラスファイルがwar/WEB-INF/classes配下にコピーされないので注意してください。

2010-06-04

AppEngine ja Night #8 のBeer Talkで話します

| 17:36 |  AppEngine ja Night #8 のBeer Talkで話しますを含むブックマーク

銀座なう。

ということで、札幌からAppEnginge ja Nightに参加するために飛んできました。

折角と言うことでここ半年ほど色々といじっているAppEngine上で動くCMS(開発中)etupirkacmsの開発で得た経験を元にspin-up関連のネタで話をすることになりました。というわけで資料を置いておきます。Ustこちらとのこと。時間のある方はどうぞ。