2010年2月4日木曜日

swfmillのバッチファイルを作ってみた

swfmillを使ってswfとxmlを相互に変換する作業を
繰り返し繰り返しやる必要があったので
ドラッグアンドドロップできるようなバッチファイルを作ってみた。

swf2xml.bat
@ECHO OFF
FOR %%I IN ( %* ) DO (
  ECHO $ swfmill swf2xml %%~nxI %%~nI.xml
  swfmill swf2xml "%%~I" "%%~dpnI.xml"
  ECHO .
)
PAUSE
xml2swf.bat
@ECHO OFF
FOR %%I IN ( %* ) DO (
  ECHO $ swfmill xml2swf %%~nxI %%~nI.swf
  swfmill xml2swf "%%~I" "%%~dpnI.swf"
  ECHO .
)
PAUSE

2010年1月27日水曜日

jrubycでプリコンパイルしてみた

JRubyではRubyスクリプトをプリコンパイルしてclassファイルにすることができる。

% type sample.rb
puts "hello world

% mkdir bin
% jruby -S jrubyc -t bin sample.rb
Compiling sample.rb to class sample

実行する時にはJRubyのライブラリをクラスパスに指定する。
JRuby 1.4.0では、jruby.jarを指定すれば十分なようだ。

% java -cp ./bin;C:/jruby-1.4.0/lib/jruby.jar sample
hello world

jarファイルにjarファイルを埋め込むことができるから、(Fat JarとかOne-Jarとか)
これで「rubyなんてインストールしてないよ」っていう人でも
Javaがインストールされていれば作成したプログラムを使ってもらえる。

ちなみに、jrubyはコンパイル済みのクラスファイルを実行することもできる。

% jruby sample.class

便利そうだけど、JRubyがインストールされている環境でjrubycでコンパイルしたclassファイルを実行できて嬉しいことがあるのかどうかちょっと疑問。

exerbみたいにrequireをトレースして必要なファイルを全てコンパイルしてJarに固めるような機能があったら便利そう。

2010年1月21日木曜日

Groovyは僕を幸せにするか?

Groovyを使ったらプロトタイプ開発=製品開発にできるだろうか?


プロトタイプ作成にRuby使って書いたコードを、製品用にJavaに書き直したとき
Rubyのコードは600行(約15KB)位だったのに
Javaのコードは1200行(約34.5KB)超えてちょっとうんざりした


Ruby→Javaにしなければならなかった理由は

  1. バグ修正、機能拡張 ← 担当者がRuby知ってることはオプション。Javaは必須要件。
  2. パフォーマンス ← 軽くて早いのがいい

という事だったかな。

「Java必須ならRubyも必須でしょ?」はちょっと難しそうだけど
「Java必須ならGroovyも常識でしょ?」ってちょっと頑張ればごり押しできるかも
...とか妄想してみたりしなかったり。

Groovyのパフォーマンスはどうなんだろう。調べてみたい。

Play!

PlayフレームワークはJavaでWebアプリ開発を簡単にする...らしい。
The Play framework makes it easier to build Web applications with Java

Javaで軽快に使える「軽量フレームワーク特集」
~本格的なRoRスタイルフレームワーク「Play!」

ほぅ。Groovyにも興味が出てきた。←え!そっち?

2009年12月17日木曜日

左再帰を取り除くメモ

左再帰
A : A B0
| A B1
...
| A Bn
| C0
| C1
...
| Cn
※1 B0 ... Bn はε(空)ではない
※2 C0 ... Cn は A を先頭に持たない

左再帰を消す
A : C0 A_tail?
| C1 A_tail?
...
| Cn A_tail?

A_tail : B0 A_tail?
| B1 A_tail?
...
| Bn A_tail?

2009年12月4日金曜日

Rubyでメールアドレスかどうか調べたくなってみた

結論→今日はメールアドレスかどうかをちゃんと調べる必要がないので適当にごまかしておく。

「やっとくか〜?」と思ったけれど、やっぱり面倒だった。あはは...

厳密には正しくないけど今はまぁこれで十分な感じの正規表現
valid_chars = '[0-9A-Za-z_!#\$%&*+\-\/=\?^_{|}\~\.]+'
valid_pattern = Regexp.new("^(#{valid_chars})@(#{valid_chars})$", nil, 'n')

ところで元ネタは2002年のRubyなので、Regexp#newのパラメータが現在(Ruby 1.8とか1.9)とは異なるようだ。
元ネタではRegexpの引数が2つになっていて、第2引数は 'n' だ。
この 'n' は文字コード "none" の指定じゃないかと思われる。
Regexpのリファレンスマニュアル見ると第2引数がFixnum以外で真ならIGNORECASEになるって。
当時はオプションの指定ができなかったのだろうか?それとも単なる転記ミス?