2006/11/24

groovy, rhino, jython, jrubyの実行速度比較(2)

groovy, rhino, jython, jrubyの実行速度比較に対して、JRubyの実行速度について下記のコメントをもらった。

Charles Oliver Nutterwrote

Can you run again with JRuby 0.9.1, or better yet with JRuby trunk? 0.9.1 is twice as fast as 0.9.0, and trunk is almost twice as fast again.
というわけで、とりあえず0.9.1について再度テストを実行。
その結果は下記のとおり。
testmaxminaverage
alloc array1104575692.11
alloc matrix231918672012.87
compare871761656543.73
count463941414320.07

0.9.0と比較すると、その実行速度は
  • alloc array:約2.5倍
  • alloc matrix: 約2.75倍
  • compare: 約2.9倍
  • count: 約2.7倍
という結果。
compareとcount以外はほぼGroovyと同じ。
現在のtrunkに対してはまだテストしていないが、これがさらに2倍程度早くなるとしたら、Jythonに近づくことになる。

Groovyも頑張れ。超頑張れ。

WorkStyle mockup version1.2

WorkStyleのモックアップを更新しました。
変更内容は下記のとおり。

  • タスクに優先度、〆切、作成日を追加
  • 各画面をよりシンプルに
  • HTMLソースのリファクタリング
WorkStyleの機能についてはこれで一旦FIXする予定です。
# インポートとエクスポート機能を追加するかもしれませんが。

DBTestCase更新

データベースを利用するユニットテストを簡易化するDBTestCaseの0.1.3をリリースしました。

変更内容は下記のとおり。

  • DBのトランザクションをテストクラスと共有できるように変更
  • DBTestCase.prepareがinsert前にdeleteを行っていたのを、insertのみに変更
バージョンは0.1.3ですが、ドキュメント以外の必要な機能は全てそろっています。
下記のようなExcelファイルを用意しておき、
  • Excelのシート名にテーブル名を記述
  • 表の1行目にカラム名を記述(削除する場合にキーにするカラム名は太字にする)
  • 2行目以降は必要なデータを入力
このように利用します。

public class RoleManagerTest extends DBTestCase {
Connection con = null;

protected void setUp() throws Exception {
super.setUp();
con = getConnection(); // autocommit = falseなコネクション
prepare(con, new Classpath("package/tree/TestDataExcel.xls"));
}

protected void tearDown() throws Exception {
super.tearDown();
con.rollback();
}
}


トランザクションをコミットしたい場合は、テスト終了後のデータ廃棄にはDBTestCase#clear()を利用します。

2006/11/18

【まる・てん.てん・】

Yahoo Japan! Internet Creative Award
で大賞をとった【まる・てん.てん・】というブログツールがちょっとすごい。

どうすごいかは、ここでツール自体を実際に見てみてほしい。

2006/11/16

TextMateでGroovy

GrailsチームのリーダーGrame RocherがTextMate用のGroovy環境を作ってくれたらしい。

Getting Groovy with TextMate
このサイトに、TextMateのGroovy用バンドルについての詳しい説明がある。

バンドルのtarボールがcodehausのsubversionにあるところを見ると、そのうちgroovyの公式サイトのIDEサポートのプラグイン情報のところにも出てくるだろう。

リリースノートはこちら


インストール方法:

  1. tarボールをダウンロードし、解凍する
  2. bundleファイル(Groovy.tmbundle)を~/Library/Application Support/TextMate/Bundlesにコピーする。
  3. TextMateを起動する

TextMateからGroovyを実行:
前提:Groovyをインストールし、GROOVY_HOMEを設定してあること。
  • 実行したいGroovyファイルをTextMateで開いた状態でCommand + Rで実行
  • 実行したい行を選択しCommand + Optiion + Rで選択した部分だけを実行

サイエンティストはマッドであるべきだ

1:05から始まるエンジン音が恐ろしい。

2006/11/12

Velocityでテンプレートを継承する方法

VelocityでDjangoのテンプレートのように基底のテンプレートをextendするための方法。

継承ができると何がいいか?
なぜそれほどうらやましいのか?


1. 基本となるレイアウトを1つのファイルで記述し、
  変更が必要な部分のみ別のテンプレートに記述できる。
2. 基本レイアウトの変更可能部分についても、デフォルトの記述が可能。
3. 階層的に複数のレイアウトを継承できる(Aを継承したBを継承したCを・・・)
4. したがって、継承した側のテンプレートでは「本当に変更が必要な部分のみ」
  記述すれば良い。

重要なのは2と3。

デフォルト記述の例:

例えばWebサイトで他の基本的なレイアウトは同じだがメニューだけが違うページが複数あるような場合を考える。
VelocityLayoutServletであれば、メニューだけが違う基本レイアウトテンプレートをそれぞれ用意するか、もしくはマクロなどでメニューを動的に変更できるよう工夫する必要がある。



上記の継承が使えた場合は、よく使われるメニューをデフォルトとして記述した基本レイアウトを1つ用意し、異なるメニューが必要な場合のみ拡張先のテンプレートで記述すればよい。




階層的な継承の例:

上の例であるメニューの中に、さらに特定のレイアウトが共通する複数のページを作る場合を考える。
VelocityLayoutServletであれば、・・・もう考えるのいやだ・・・な・・・となる。
継承が使える場合、前の基本レイアウトを継承した基本レイアウトを作る。簡単!




Velocityでテンプレート継承
いくつか方法はあると思うが、ユーザディレクティブを利用する方法を採用した。
velocity toolsではなく、velocity自体に継承機能を追加するため、どこででも利用できるのが利点。

今回、ユーザディレクティブに追加したのは下記の2つ。
# extends('継承元ファイル')
# block('ブロック名')

手順1:
ディレクティブの実装クラスをダウンロードし、適切な場所に追加する。
velocity-template-extends.zip

手順2:
velocity.propertiesに下記のユーザディレクティブ設定を追加する。
#-------------------------------
# USER DIRECTIVE
#-------------------------------
userdirective=org.apache.velocity.runtime.directive.Extends
userdirective=org.apache.velocity.runtime.directive.ExtendBlock


以上、終了。


使用方法

extendsディレクティブ
extendsはparseディレクティブの変形で、extends〜endまでの部分をパースしてから継承元ファイルをパースするディレクティブ。

A.vm:

#extends('B.vm')
A特有の内容をここに(普通はblockディレクティブ以外を書くことはない)
#end

B.vm:
Bの内容
A.vmのパース結果:
A特有の内容をここに(普通はblockディレクティブ以外を書くことはない)
Bの内容


blockディレクティブ
blockはテンプレートの「部分」を定義するディレクティブで、extendsの範囲外にある場合のみパース結果を書き出す。
同名の「部分」が複数ある場合は、常に最初に定義された「部分」が後から出てきた「部分」を上書きする。
1.vm:
#block('X')
最初に定義したXブロック
#end
#block('X')
次に定義したXブロック
#end

1.vmのパース結果:
最初に定義したXブロック
2.vm:
#extends('3.vm')
#block('X')
最初に定義したXブロック
#end

3.vm:
基本テンプレートではXブロックを定義していない
2.vmのパース結果:
基本テンプレートではXブロックを定義していない

4.vm:
#extends('5.vm')
#block('X')
最初に定義したXブロック
#end

5.vm:
#block('X')
ここでXブロックを定義
#end

5.vmのパース結果:
最初に定義したXブロック


継承の例
basic_layout.vm:
基本レイアウトをここに。
#block('menu')
デフォルトのメニュー
#end
#block('contents')
デフォルトの内容があれば、ここに
#end

pageA.vm
#extends('basic_layout.vm')
#block('contents')
内容だけ変更
#end
#end

pageB.vm
#extends('basic_layout.vm')
#block('contents')
独自の内容
#end
#block('menu')
メニューも変える。後ろで定義しても、最終的にはextendsの外での並び順になる。
#end
#end

pageAのパース結果:
基本レイアウトをここに。
デフォルトのメニュー
内容だけ変更


pageBのパース結果:
基本レイアウトをここに。
メニューも変える。後ろで定義しても、最終的にはextendsの外での並び順になる。
独自の内容

EclipseでJakartaのコードフォーマットを利用する

参照:http://wiki.apache.org/directory/IdeHome

Apache.orgではEclipseのコードスタイルの設定用ファイルを用意しているので、ファイルを取得し、Eclipseにインポートしてやればよい。

Eclipseの設定方法は下記の通り。

  1. Windowメニュー→Preferences > Java > Code Style > Formatter
  2. 「import」ボタンを押下。上記URLから取得したファイルを選択してインポート。

実際にこのフォーマットを適用するには、ソースファイルの中で
  • 右クリック→Source→Format
  • Shift + Cmd + F (OS Xの場合)

2006/11/08

割礼

動画
ゴンッ!! ピョン!

2006/11/03

Free Hugs

フリーの協調フィルタリングエンジン

Taste

Javaで作られたフリーな協調フィルタリングエンジン。
・User-based Recommender
・Item-based Recommender
・Slope-One Recommender
の3つの方法によるレコメンデーションが可能。

アプリケーションとの連携方法もいくつかパターンがある。
Direct
直接、アプリケーションに埋め込む方法。

Standalone server
別サーバとして起動し、HTTPリクエストかSOAPによって連携する。

EJB
ステートレスセッションBeanを通して利用する方法。Javaで作られたフリーな協調フィルタリングエンジン。

  • User-based Recommender
  • Item-based Recommender
  • Slope-One Recommender
の3つの方法によるレコメンデーションが可能。

アプリケーションとの連携方法もいくつかパターンがある。
Direct 直接、アプリケーションに埋め込む方法。
Standalone server 別サーバとして起動し、HTTPリクエストかSOAPによって連携する。
EJB ステートレスセッションBeanを通して利用する方法。

OS XでISOイメージを焼く

OS Xでは標準でついてくる「ディスクユーティリティ(Disk Utility)」を使ってisoイメージの作成とCD/DVDへの焼き付けが出来る。

■isoイメージの作成
参照:http://osx-navi.main.jp/Utilities/dmg.html

ディスクイメージの作成方法:
ファイルメニュー→「新規」→「フォルダからのディスクイメージ」でイメージ化したいフォルダを選択。
「イメージ」ボタンをクリック→保存場所を指定すれば自動的に作成してくれる。
暗号化(パスワード設定)も可能。

CD/DVDをディスクイメージにする:
CD/DVDをセットし、ファイルメニューの「新規」→「"〜”からのディスクイメージ」を選択します。

Windowsで開けるISO形式のディスクイメージを作成する場合:
保存時の「イメージフォーマット」を「DVD/CDマスター」で「保存(作成)」する。
作成されたイメージファイルの拡張子は「.cdr」なので、「.iso」に書き換えればWindowsでも開ける。

■isoイメージをCD/DVDに焼く
ディスクユーティリティで「ディスクを作成」ボタンを押下し、isoイメージを選択する。

2006/11/02

IDEに求めるもの

IDEの個人的な評価軸のメモ

- リファクタリングがさくさく出来る → EclipseのJDTいいね
- ユニットテストがさくさく出来る → EclipseのJDTレベルあれば十分
- ステップ実行が出来る → ま、大抵のIDEはできる。
- Subversionとの統合 → CVSはなくていい
- コード補完 → TextMateのスニペットはすごいね。
- 動作の軽さ → 起動の重さは多少は我慢する
- コードブラウジングの容易さ → 関連する複数ソース間の往来

他になんかあったかな?
最近のVisualStudioはどんな感じなのだろうか。