« [Windows Mobile]Advanced/W-ZERO3[es]と京ぽん2の周波数特性測定 | Main | [Windows Mobile]PythonCEをAdvanced/W-ZERO3 [es]で使ってみた »

2007.07.27

[Windows Mobile]ruby-mswinceをAdvanced/W-ZERO3 [es]で使ってみた

Advanced/W-ZERO3 [es]でRubyが動いたら楽しいよね?

……ということでWindows Mobile向けのRubyであるuema2.さんのruby-mswinceをAdvanced/W-ZERO3 [es]で使うべく頑張ってみました。

ruby-mswinceのインストール

Windows Mobileにはコンソールが入ってないのでインストールします。

こちらを参考にしました。

Windows Mobile Developer Power Toysをダウンロード

・Windows Mobile Developer Power ToysをPCにインストール

・インストールディレクトリにある「PPC_Command_Shell\arm」ディレクトリから「cmd.exe、console.dll、shell.exe」をAdvanced/W-ZERO3 [es]のWindowsフォルダにコピー

TRE等でレジストリを編集

[HKEY_LOCAL_MACHINE\Drivers\Console]
"Font"="tahoma"
"Size"=dword:00000009
"OutputTo"=dword:00000000

・再起動

ruby-mswinceをダウンロード (2007.07.25現在はruby-1.8.6-armv4i-wm5-mswince070531.zip)

・母艦で解凍、デバイスにコピー

・ホーミンさんのSystem Pathで、<インストールパス>/ruby/binにパスを通します

使い方

/Windows/cmd.exeを起動し、

ruby <スクリプトへのフルパス>

としてスクリプトを実行するか、PocketTweakで拡張子rbをrubyに関連付けるか。

懸案のrequire問題を回避

ruby-mswinceは、PocketTweakで拡張子rbに関連付け、GSFinderなどからスクリプトを実行するとライブラリをrequireしても問題無いものの、なぜかコンソールから実行するとライブラリにパスが通っていない状態になります。コンソールから実行する場合は対策します。

$:(別名$LOAD_PATH)の中身がすべて相対パスになってしまうのが原因なので、絶対パスにします。
requireする前に、以下の2行を書きます。要するにパスの頭に「/」をくっつけてます。

temp_path = $:.map{|x| if x != "."; x = "/#{x}"; else; x; end}
$:.clear().concat(temp_path)

require 'time'
require 'date'
require 'digest/md5'

冒頭の2行を、例えばloadpath.rbなどという名前でファイルに保存し、<インストールパス>/ruby/binに置いておくと、上記は、

require 'loadpath'
require 'time'
require 'date'
require 'digest/md5'

こんな風にできて便利。
何でスクリプトの実行方法でこんな違いが出てくるんですかね。

インプレッション

uema2.さんがおっしゃるように、socketがコケるようです。この点はとても残念……。
zlibもrequireに失敗します。

でも、いつでもどこでもRubyスクリプティングができるのは幸せ。
コーディングにはEmacsCEを使ってます。

コンソール問題

上記の手順でインストールしたWindows Mobile Developer Power Toysに含まれるcmd.exeは、しばらく使っていると標準出力に何も出力しなくなり、直すにはリセットするしか無いよう。
横スクロールができず、折り返しもしないのでエラーメッセージが読めず非常に具合が悪いです。

代替のコンソールを探さなくては。

|

« [Windows Mobile]Advanced/W-ZERO3[es]と京ぽん2の周波数特性測定 | Main | [Windows Mobile]PythonCEをAdvanced/W-ZERO3 [es]で使ってみた »