サーバサイド Groovy と Groovlets

ちょっと前ですが、スクリプト言語 Groovy の新しいバージョンにあわせて eclipse-groovy プラグインのバージョンがあがったということで、ちょっと触ってみました。 Groovy 自体、ワンショットスクリプトを数回かいただけでほどんどさわったことがないのですが、まぁお遊びということで。

このスクリプト言語、いざとなったら普通の Java の書き方できるので手が止まらなくて便利なのです。 クラスライブラリもいつもの使えますし(笑)

【コラム】イマドキのIDE事情 (74) 高機能なGroovy開発環境「Groovy-Eclipse 2.0」リリース! | エンタープライズ | マイコミジャーナル

1月15日、Groovy開発用のEclipseプラグイン「Groovy-Eclipse 2.0」がリリースされた。GroovyはJava VM上で動作するスクリプト言語でJavaに似た構文を持つためJavaプログラマにとって扱いやすいという特徴がある。Groovy-EclipseはこのGroovyでの開発を強力に支援してくれるEclipseプラグインだ。バージョン1.0から大幅に機能が強化されており、Eclipse標準の Java開発環境であるJDTと比較しても遜色ない開発支援機能を備えている。

ぱらぱらみていると、Groovy をサーバサイドでつかう Groovlets という仕組みがあるようだったので、こちらとあわせてサーブレット環境で使ってみることに。

以下、せっかくやったのでメモです。

とりあえず、Eclipse WTP で新規「動的 Web プロジェクト」をつくります。

groovlets02

普通ですね。 🙂

で、このままだと Groovy-Eclipse が構成されていないので(.groovy がコンパイルされない)、つくったプロジェクトを右クリックして Groovy を構成します。

groovlets01

Convert to Groovy Project。 これで nature に groovy が入ります。 でもって、これやると groovy の jar も追加してくれるのですが、JavaEE の場所 (WEB-INF/lib)に入らないので消して、手動で lib の下にいれてあげます。

Groovlets を使うには –all を使うといいようです。 配布元にある groovy-binary-1.7.0.zip の embeddable フォルダに入っています。

あとは、 src の下で .groovy ファイルを作成すればコンパイル・再デプロイを groovy-eclipse と WTP がやってくれます。 ここまでで、 .groovy のグルーヴィな記述でサーバサイドプログラムを行うことができます。

さて、こっからが Groovlets。

サーバに「ファイルとして配置された」 .groovy をそのまま動かすのが Groovlets です。 ランタイムで勝手にコンパイルしてくれます。 あと、GSP という JSP みたいなテンプレートライブラリがあります。

要はサーバに配置された .groovy ファイルを書き換えると Groovlets がホットデプロイ(とはいわないか。JIT?) してくれる仕組み。 ぼくはまた、このホットデプロイを利用しながら、Groovy のシンタックスシュガーを使いまくって小規模な Web アプリを高速にかくものと想像していたのですが、どうもそうとは違う模様。

間違っていたらご指摘いただきたいのですが、 Groovy でモジュールを分割する仕組みは import のみ。 でもって、Groovlets は import 先のモジュールはダイナミックにコンパイルしてくれないのです。 なので、プログラムは url-pattern にあたったひとつの .groovy ファイルだけで構成する必要があります。

もちろん、デプロイ時に .class になっているものは import 可能なので Eclipse で .groovy かいてコンパイルしてデプロイすりゃいいんですが、そしたら Groovlets 使わなくてもいいような(笑)

結論的には、GSP とか JSP とかと同じように html テンプレートで使うのかな~。 もしくは上にフレームワークをかくための土台、、あとモジュール1本で済むような、「なんとか度」判定みたいなアプリとか。 😀

groovy のオリジナルソースを読んだところ、ダイナミックコンパイルは直アクセスだけでなく RequestDispatcher の指定も対応しているようだったので、きっとそういうことなのでしょう。

てなわけで、試しに以下のように構成してみました。

groovlets03

web.xml (抜粋)

<display-name>Groovlets</display-name>
<!-- Groovlets -->
<servlet>
    <servlet-name>Groovy</servlet-name>
    <servlet-class>groovy.servlet.GroovyServlet
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Groovy</servlet-name>
    <url-pattern>*.groovy</url-pattern>
</servlet-mapping>
<!--  GSimpleServlet -->
<servlet>
    <servlet-name>GSimpleServlet</servlet-name>
    <servlet-class>net.maple4ever.groovlets.GSimpleServlet
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>GSimpleServlet</servlet-name>
    <url-pattern>/index.do</url-pattern>
</servlet-mapping>

Groovlets と自前のサーブレットを2つ登録します。

テンプレート(ダイナミックコンパイル側)の .groovy ファイルは WEB-INF/groovy もしくは WEB-INF/ に配置します。(/ 優先で、そこになければ groovy/ を見に行くようになっていました) ここではわかりやすいように WEB-INF/groovy/index.groovy を配置。

index.groovy

html.html {
    head {
        title 'index.groovy'
    }
    body {
        h1 'Hello, Groovy World.'
    }
}

このへんが groovy の面白いところで、クロージャをつかった html の builder とかがあります。 これを使っておけば変な HTML ができることはないでしょう。(たぶん)

で、サーブレット側。 一応こちらも groovy っぽく書いてみる。。

GSimpleServlet.groovy

package net.maple4ever.groovlets;
 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
class GSimpleServlet extends HttpServlet {
    
    void doGet(
        HttpServletRequest request
        , HttpServletResponse response) throws IOException {
        def rd = request.getRequestDispatcher("index.groovy")
        rd.include(request,response);
    }
    
}

最初、 void doGet(reauest, response) とかかいてみて、動かなくてはたと2分。 型を指定してなかったので、 HttpServlet の doGet をオーバーライドできなかったというオチでした。 オーバーロードになっちゃったのね。 てっか、そこ省略は怖いか。 🙂

で、この中で index.groovy をこんな感じで include してあげると、読まれた時点で index.groovy が動的コンパイルされます。

ということで、、、う~ん view に groovy 使えるよ、という理解でいいのだろうか。いまいっぽ腹に落ちないひろまさくんでした。

wp-kougabu 1.12 リリースとぶらりぶらり

ぼくの密かなたのしみは、MMRT daily life の上部に配置されたランダムポストをクリックして次々と出てくる記事をうししと読むことだった。

いつかぼくもランダムポストを、そう思って早3年。 なにやら twitter を覗くと、 kougabu を利用したランダムポストがにいさんによってつくられている!?、こ、これは…!!

…ということで、にいさんこと、をかもとさんが現在作成中の豪華エフェクト付きランダムポスト・スライドショープラグインに向けて、wp-kougabu をバージョンアップしました。 kougabu の API がいまいちだったのでプラグインに向けて拡張しています。

WordPress Plugins-JSeries » wp-kougabu (画像付きアーカイブ)

wp-kougabu-1.12.zip

kougabu_get_images 関数に新規のオプション array_ext を追加しました。画像属性が分割された形式で配列を取得できプログラムから扱いやすくなりました。

それ以外に変更はありませんので、ダウンロードいまお使いの kougabu に上書きしていただいて、にいさんのリリースを楽しみにしていただければ。 新規の方も使い方かわりません。

うちのサイドバー下でうごいているのが、そうです。 🙂

burari01 

うーん、たのしすですね。 ウィジェット、ショートコード、関数から kougabu サムネイルを利用したランダムポスト・スライドショーを呼び出すことができます。

近くリリースされると思いますので、にいさんのブログを要チェックや!  🙂

(23:40 追記)

JSeries にリリースされました!

WordPress Plugins-JSeries » Kougaburari ( ランダムポスト・スライドショー )

画像付きアーカイブ表示プラグイン「wp-kougabu」のランダムポスト機能を使用して、スライドショーを表示するプラグインです。

にいさん、ありがとうございます!

Kougaburari  dogmap.jp

てなわけで、前から気になっていた jQuery プラグイン JQuery Cycle Plugin を使用して、wp-kougabu が吐き出したランダムポストイメージをスライドショー表示するプラグインを作りました。

むっふっふ。 🙂

携帯電話 Bluetooth + DUN でモバイルインターネットを試す

10年前くらいは携帯電話/PHP の回線契約数を 5 回線くらい持っていたりして、モバイル系大好きだったのですが、いつのころからかご無沙汰気味。

昔はこの手のがずいぶんお値段高くて維持費的なものからやめてしまったと思いましたが、最近 ドコモの 128K パケホーダイとかでてきて、お小遣いくらいでまた遊べるようになったので、ちょっと復活して試しに Bluetooth + DUN を使ってノートPC をインターネットにつなぐ準備をしてみました。

こういうの、なにかちょっとした出張とかあったときのためとか、緊急時のインターネット回線用にとかでも用意しておくと便利かもしれません。 🙂

bluetooth01

用意したのはノートPC ThinkPad くんと、ドコモの FOMA 携帯電話 SH906i さん。

また、ドコモの FOMA を契約していると、mopera U というドコモがやっている携帯電話接続可能なインターネットプロバイダを使うことができます。 これが現在キャンペーン中で、4末までですが 0円、もしくは 262.5円/月で接続することができます。

キャンペーン|サービス一覧|ドコモの定額データプラン対応のインターネット接続プロバイダ「mopera U (モペラユー)」

2009年12月1日(火)~2010年4月30日(金)

てなわけで、こちらの U スタンダードプランを使ってみることに。 ライトでもいいのでうすが、ドコモの公衆無線LAN Mzone も 0円キャンペーン中なので、こちらも試してみたくてスタンダードにしています。(ライトだとつけられない)

ちなみに mopera U の契約は、携帯電話を使って iMode のお客様メニューからやるのが一番簡単そうでした。 ただ申し込みサイトの説明がちょっと違っていて、

お申込み・契約変更|ドコモの定額データプラン対応のインターネット接続プロバイダ「mopera U (モペラユー)」

「iMenu」⇒「お客様サポート」⇒「お申込・お手続き」⇒「各種お申込・お手続き」⇒「便利なサービスの申込」

とありましたが、なくって、、「便利なサービス」じゃなくて、「MM サービス」というメニューの中にありました。 探したわ。 っていうか MM って久しぶりに聞いた(笑) ここでスタンダード + 公衆無線LAN を申し込みました。

ではでは、まず ThinkPad + SH906i の Bluetooth で Windows から DUN してみます。

どんな PC でも同じですが、先ずは PC 側の Bluetooth を有効に。。 …する方法を忘れて10分を消費しました。。 デバイスマネージャから見えなかったので一瞬、ぼくの ThinkPad に Bluetooth がついていたのが夢だったかと。。(笑)

ThinkPad の場合は Fn + F5 でオンにできます。 🙂

bluetooth02

で、デバイスマネージャを確認。 でてきます。

bluetooth04

あとは、携帯電話の Bluetooth メニューから機器検索とかして、PC とペアリングします。 そうすると、PC 側にデバイスが現れます。

bluetooth05

この PC の場合は、携帯電話が COM4 に割り当てられました。 この状態で COM4 にアクセスがあると Bluetooth の無線を経由して接続されます。

で、ここからが mopera U に接続する設定です。 実はドコモからコネクションマネージャというのアプリがでていてオート設定できるのですが、ここは黙って手動設定。(笑)

まず、携帯電話に mopera U の APN を登録します。 ここでは実験なので、インターネットには接続できない、(現在)パケット無料の管理画面表示用のアクセスポイントを追加。

Poderosa でも teraterm でも使って、携帯電話のつながっている COM4 にアクセスします。 Bluetooth 経由で携帯電話のモデムにつながるハズです。 昔みたく PC と携帯をケーブルつながなくていいので便利ですね。 携帯電話はポッケにいれたままでOKです。 😀

でもって、携帯電話モデムの AT コマンド(説明書にでています)を使って、0120.mopera.net という APN を追加します。 番号は 10 にしてみました。

bluetooth03

シリアルなのでコマンドはゆっくり入力しましょう。 文字が遅れてくるよ。

AT+CGDCONT?
+CGDCONT:1,"PPP","mopera.ne.jp",,0,0
+CGDCONT:3,"IP","mopera.net",,0,0
OK
AT+CGDCONT=10,"IP","0120.mopera.net"
OK
AT+CGDCONT?
+CGDCONT:1,"PPP","mopera.ne.jp",,0,0
+CGDCONT:3,"IP","mopera.net",,0,0
+CGDCONT:10,"IP","0120.mopera.net",,0,0
OK

SH906i では APN 追加は、AT+CGDCONT= コマンドです。(真ん中コマンド) 他の携帯電話の方はマニュアルを確認のこと。(たぶんいっしょですが)

できたら、PC からここで登録した APN にダイアルアップします。 番号識別は電話番号の欄で行います。 携帯電話デバイスから右クリックして、ダイアルアップネットーワークの追加。

bluetooth06

電話番号に *99***[APN番号]# を設定します。 ここでは先に設定した 10 を。

で、ダイアル。 🙂

bluetooth07

ユーザ名とパスワードは、mopera U に加入したときのウエルカムメッセージの URL からネットワーク暗証番号をいれた後の画面で確認できます。(若干わかりにくい)

接続できたら、 http://start.mopera.net/ にアクセスしてみましょう。 つながっているはずです。 この APN ではここのサイト以外はつながりません。(設定確認などをするところです)

ちゃんとインターネットにつながる 128K パケホなどの APN 設定情報はこちらにあります。

設定方法|ドコモの定額データプラン対応のインターネット接続プロバイダ「mopera U (モペラユー)」

ネットワーク設定(アクセスポイント等)やメール設定(POP、IMAP等)など、手動で設定を行う際に必要な各種設定情報をご紹介いたします。

手動設定用詳細情報(PDF形式:735KB)

mopera Uを従量でネットサーフィンやメールを利用する場合のアクセスポイント情報です。

アクセスポイント一覧(PDF形式:1,008KB)

パケホ 128K だと、APN は mpr.ex-pkt.net かな。(必ずサイト/PDF で確認してください) 128K だと使えないですが、フィルタリングフリーアクセスポイントとかあって面白いですね。

実は、ぼくのパケホ契約はまだ昔のやつなので 128K 接続つかえず、インターネット接続は試せていないのですが、後日やってみます。(一応、準備だけしたらしい(笑))

では、最後に mopera u スタンダードで使える、Mzone という公衆無線LAN。 このオプションをつけておくと、携帯電話じゃなくって、普通のそのへんにとんでいる Mzone の 無線 LAN も使えるようになります。

札幌だと、地下街はほぼ全域で使える模様。 あとはホテルとか空港とか、カフェとかですかね。 ぼくは、お昼あの辺の地下街でご飯を食べていることが多いのでためしてがってん。

接続は iPod touch より。 🙂

mopera01 

うむうむ。 札幌地下街歩きながら見ていましたが、だいたいつながるようです。 現在 0 円なのでこれはお得。。 ポートは http のみかな、、メールは試しませんでしたが、特殊なポートはふさがれている模様でした。 WEP 接続なので、まぁまぁやることはほどほどに。

iPod touch から http でブラウジングはちゃんとできるので、お昼のオタノシミが増えました(笑)

とりあえず、ダイアルアップ、公衆LAN ともにキャンペーンは 4末までなので、それまでにいろいろ試してみたいと思います。 🙂