2009/11/23

GoogleAppEngineにGaelykとT2を仕込んでみる

Javaを勉強した後にLL系にいった自分としては、GAE/JでまたJavaをやるのはなぁと思っていた。だったらGroovyは?と思って調べていた時にGaelykと出会った。(GAE/Pはスルーしてました。PythonよりGroovyの方が好きなこともありますが…)
単純にGAE/JでGroovyを動くようにするには、こちらのブログに書いてある通りにすれば良いのだが、GaelykはGAEの様々な機能を使い易くしてくれている。特に「low-level datastore API」と「task queue API」に反応してしまった。

※詳しくはGaelykのTutorialページを参照。また、チュートリアルを日本語訳してくださっている方も

またT2を使うのは、URLが/hoge/foo.groovyとかになってしまうのがカッコ悪いから(笑)ではなく、WebアプリのURLはできるだけアーキテクチャに依存されないようにすべきという考えに基づき、/hoge.拡張子やら?p=fooを排除したいのと、T2でURLマッピングしていた方が、後々何かあったときに柔軟に対応できそうな気がするから。

思いの他、前置きが長くなってしまったが、とりあえず、セットアップのメモ。

環境はこんな感じ。
  • Mac OS X 10.5.8 (Leopard)
  • Eclipse 3.5
  • appengine-java-sdk-1.2.6
  • Groovy 1.7-beta-2
  • Gaelyk0.3.1
  • T2 0.6.2-ga
  • T2 extension modules 0.6.2-ga
  • Google Guice 1.0
あと、Javaは1.6を使います。(多分T2が1.6じゃないといけないから)

では、Eclipseでプロジェクトを作成し、それをカスタマイズしていきます。

1.GAEのプロジェクトを作成します。(GWTは使わないので外してます)


2.デフォルトで展開されるファイルはこんな感じ


3.下記から必要なファイルをダウンロードして必要なjarを集め、プロジェクトに追加していきます。

gaelyk-template-project-0.3.1.zip
http://gaelyk.appspot.com/download/

t2-0.6.2-ga.zip
t2-ext-0.6.2-ga.zip
http://code.google.com/p/t-2/downloads/list

guice-1.0.zip
http://code.google.com/p/google-guice/downloads/list

必要なjarはコレ



4.追加するとこんな感じ

※外して良いjarもあると思いますが、調べてないのでそのままいきます。

5.Javaコンパイラーを1.6に設定します


6.ビルドパスに「t2-0.6.2-ga.jar」を追加します


7.設定ファイルを編集します
・Gaelyk031_T2_Sample/build.groovy
new AntBuilder().sequential {
    webinf = "war/WEB-INF"

    gaeHome = System.getenv("APPENGINE_HOME")
    if(!gaeHome) {
        println "To build your file you have to set 'APPENGINE_HOME' env variable pointing to your GAE SDK."
        System.exit(1)
    }

    taskdef name: "groovyc", classname: "org.codehaus.groovy.ant.Groovyc"

    groovyc srcdir: "src", destdir: "${webinf}/classes", {
        classpath {
            fileset dir: "${webinf}/lib", {
                include name: "*.jar"
            }
            fileset dir: "${gaeHome}/lib/", {
                include name: "**/*.jar"
            }
            pathelement path: "${webinf}/classes"
        }
        javac source: "1.6", target: "1.6", debug: "on"
    }
}

・war/WEB-INF/web.xml



    
        Guice Servlet Filter
        com.google.inject.servlet.GuiceFilter
    
    
    
        t2
        org.t2framework.t2.filter.T2Filter
        
            t2.rootpackagepackage com.keygraphix.gae.sample
        
            t2.container.adapterorg.t2framework.t2.adapter.GuiceAdapter
        
            t2.eagerloadtrue
        
            t2.exclude-resourcescss, js, png, gif, jsp, jar
    
    
    
        Guice Servlet Filter
        /*
    
    
    
        t2
        /*
    
    
    
        GroovletServlet
        groovyx.gaelyk.GaelykServlet
    
    
    
        GroovyServlet
        groovy.servlet.GroovyServlet
    
    
        GroovyServlet
        *.groovy
    


7.src/com.keygraphix.gae.sample/IndexPage.javaを作成
package com.keygraphix.gae.sample;

import org.t2framework.t2.annotation.core.Default;
import org.t2framework.t2.annotation.core.Page;
import org.t2framework.t2.navigation.Forward;

@Page("/")
public class IndexPage {
    @Default
    public Forward index() {
        return Forward.to("/index.groovy");
    }
}
※ここがJavaなのは、Groovyでの動かし方が分からなかったから。でもGroovyで書いてもコード量減らないですよね。

8.war/WEB-INF/groovy/index.groovyを作成
html.html {
    head {
        title "Hello"
    }
    body {
        p "Hello Gealyk & T2 Sample"
    }
}

9.サーバの起動


10.で確認ブラウザ


これで最低限動くようになりました。あとは、バリバリ開発していくだけ?ですね。

プラグインで一発環境構築とかできるようになりたいなぁ。
あと、SyntaxHighlighterの表示が思った通りにならないので、これも課題だなぁ。

2009/10/18

Join UQ-WiMAX

今住んでいるところに引っ越した時にフレッツ光を解約して以来、家でもイーモバイル(D02HW+PHS300)回線を使っていた。勉強会なんかで外に行っても使えて¥4,980/月なのでコスト的には非常にオトク(光って結構高いですよね、ADSLも固定電話がないTYPE-2だと¥4,500/月程するようですし)なんですが、最近スピード的にツラくなってきたので、サービスエリア拡大でやっと使えるようになったUQ-WiMAXを導入した。

以前、モニターに当選した同僚からモデムを借りて試してみた時はサービスエリア外なので当然圏外。その後も、サービス提供予定時期に再度挑戦するも圏外。いつサービスエリアになるのかと待つことしばし。UQ-WiMAXのサイトでサービスエリアに自宅住所が含まれるようになった。

しかし過去の苦い経験から慎重を期し、15日間無料でWiMAXサービスが体験できる「Try WiMAX」に申し込んだ。

試した結果は「繋がったぁ〜!」「スピードにも不満なし」よし、契約だ!

まぁ待て、落ち着け>俺

WiMAXサービスは大元のUQ-WiMAXの他にも、UQの回線を借りてサービスを行っている事業者がいくつかある。また、料金や付加サービスにも多少違いがあったりするし、モデムの調達にもいくつかのパターンがある。

自分なりに条件を検討したところ
・ルーター機能は欲しいが、ルーターとセットで使える製品は単体だと現状Windowsにしか対応しない。
・Macのインターネット共有を使えば、余っているPowerBookG4をWiFiルーター化できる。
・PowerBooKはPowerPCなので、USBで対応可能なモデムは「UD03SS」に限られる。

というわけで、UQからUD03SSを購入&加入するという結論に固まりかけたところ、UD03SSの製造元「シンセイコーポレーション」から「MW-U2510」という同型モデルが発売されていることが発覚。しかも、シンセイコーポレーションからMW-U2510を購入し、@niftyのWiMAXサービスに加入すると、モデム代金と同額のキャッシュバックキャンペーン(2009.10.31迄)が行われているではあーりませんか。私はNiftyServe時代からのniftyユーザ。これだ!

Try WiMAXの返却期限を残すも、モデム購入、キャンペーン適用で申し込みが完了!



「UD03SS」(左)と「MW-U2510」(右)



PowerBookG4をWiFiルーター化



スピードテスト1



スピードテスト2

2009/10/11

Twitterのつぶやきをキーワード検索させる

何かTwitterを使ったプログラムを作ってみようかと、Twitter API 仕様書 日本語訳を眺めながらアイデアを考えていた。
自分がフォローしていないユーザの発言から気になるキーワードで検索して一覧を返してくれたら、いちいち検索する必要がなくなるじゃん。ってなカンジでsearch系APIを探すと…

URL: http://search.twitter.com/search.format
 (format は json, atom のうちのいずれかを指定)


ほうほう、JSONかATOMを返してくれるのかぁ。あ!
RSSリーダにAPI形式のURLごと登録してしまえば、それでいいじゃん!

あえなく、最初のアイデアは没になった。。。

以下やり方。

http://search.twitter.com/search.atom?lang=ja&q=scala
上記URLで“scala”という発言の含まれた日本語の発言を対象に検索してくれます。

複数の検索キーワードを設定したい場合は、カンマで区切ります。
http://search.twitter.com/search.atom?lang=ja&q=scala,lift

検索キーワードに日本語を指定したい場合は、URLエンコードしましょう。
例えば、“セカイカメラ”を検索キーワードに設定したい場合、一度検索キーワードが日本語の状態のURLをブラウザに入力します。
http://search.twitter.com/search.atom?lang=ja&q=セカイカメラ



ページの情報を表示(Firefoxの場合)でURLエンコードされたURLが手に入ります。



このURLをRSSリーダ等に登録すれば、あとは自動的に検索結果を入手できるようになります。
私はiGoogleに登録しました。

2009/10/04

ブログ開設

Twitterをやるようになってから、なんだかブログも書きたくなってきたので、マイペースにやっていきたいと思っています。

SyntaxHighlighterも導入したので、コードとかも載せていきたいと思っています。
println "Hello World!"