2008.05.29

[Windows Mobile]QuicTodayからTwitterに投稿する試み

QuicTodayからTwitterに投稿できたら便利だろうなと思い立ち、それを可能にするブリッジをPHPで書いてみました。

http://moyashi.0web.cjb.net/index.php

上記のURLにアクセスし、フォーム にTwitterのユーザ名とパスワードを入力。
「Create」ボタンを押すと投稿のためのURLが発行されますので、それをQuicTodayに登録します。

結果が分からず不安であれば、適当な文字を入れて試してみてください。

ログも何も取っていませんが、あなたの入力したユーザ名、パスワードを私が知る方法はいくらでもありますので、利用に当たっては他のAPI利用サイト同様、管理者たる私を信頼していただくほかありません。無保証です。

QuicTodayから投稿できるのは、63バイト+終端文字1バイトのようです。UTF-8ですので、1文字3バイト換算で21文字。制限を超えて投稿したところ、末尾が切れるのみならず、化けたことがありました。
W-ZERO3シリーズの縦位置でQuicTodayのテキストフィールドいっぱいいっぱいに「あ」を入力すると、ちょうど21文字(デフォルトの文字サイズ時)。
テキストフィールドからはみ出ない短いメッセージしか送れないと考えた方がいいでしょう。

また、QuicTodayの知られた不具合として、IE(Operaも?)が起動中だと、QuicTodayが無反応になるというものがあります。
このような状態になった場合、IEを終了させると復帰することが多いです。
PWRボタン(電話切)を押してもIEを終了しない設定にしていると、この罠にハマる可能性が高いです。

QuicTodayへの登録方法

  • 前出のサイトで作ったURLをクリップボードにコピー
  • QuicTodayの入力テキストフィールドをアクティブに
  • ソフトキー2「設定」を押下
  • 「+」ボタンを押下
  • 「名称」欄には「Twitter」等と入力
  • 「URL」欄にコピーしたURLをペースト
  • 「文字コード」は「UTF-8」に
  • OKボタンを押下

使い方

  • QuicTodayの入力テキストフィールドをアクティブに
  • ソフトキー1「検索」を押下
  • 登録したTwitter用の項目を選択
  • QuicTodayの入力テキストフィールドにメッセージを入力
  • 決定キー押下

一度Twitter用の項目を選択したら、リセットするまでそのままです。

インプレッション

文字数制限がきつく、思ったほど便利でないです。
QuicTodayから投稿できるとしたらこんな感じか、という感慨には浸れます。

| | Comments (0) | TrackBack (1)

2008.05.20

[Windows Mobile]W-ZERO3で動く、ネットワークが使えるRuby1.8.6-p111登場!!!!

ちょっと前の話ですが、CeGCCでRuby1.8.6-p111をコンパイルした人が出現しました!!
そして、その成果を公開してくださってます。

Target-Earth dot Net: Ruby on Windows CE & Pocket PC

ページ一番下の「24th Feb 2008 - Ruby 1.8.6-p111 for WinCE/ARM」というリンクからダウンロードできます。

早速試したところ、uema2.さんのポートされたruby-mswinceでは使えなかったSocketが使えてます。
つまり、ネットワーク系の機能が使えるわけです。

ちなみに、パスのデリミタはスラッシュで表現します。
相対パスは対応してないかもしれません。

以下のスクリプトの動作を確認しました。


require "open-uri"
require "kconv"
f = File.open("/test.txt", "w")
open("http://www.google.co.jp/") do |s|
s.each do |line|
f.puts(line.toeuc)
end
end
f.close

RubyGemsも動いているようです。
これは一大事!!

リンク先のページでは、コンソールからの実行を前提としているようですが、僕は拡張子rbに関連付けました。

| | Comments (0) | TrackBack (1)

2008.05.10

[Windows Mobile]Advanced/W-ZERO3[es]でのBluetooth PAN接続/切断支援MortScript

先日、Advanced/W-ZERO3[es]によるBluetooth PANについてエントリしましたが、ワンアクションで接続、切断できるようにするため、久しぶりにMortScriptを書いてみました。

関連エントリ:[N810]NOKIA N810とAdvanced/W-ZERO3[es]でBluetooth PAN

Bluetooth PAN切断中にこのMortScriptを起動すると接続を、接続中に起動すると切断します。(たまに動作が変なことも?)

僕はSortInchKeyで、このスクリプトをSoftKey2のダブルクリックに設定しています。

動画編集の練習とYouTubeデビューをかねて、デモを作ってみました。

前半: トグル動作の説明
後半: Bluetooth PANの確立〜NOKIA N810でのブラウジングまでの一連の動作

前半、なぜか額縁になっちゃってます。なんでだろ……。

ダウンロード

自分でも使ってますが、無保証です。

ライセンスは……そんなもんはありません。自由にしてください。

「togglebtpan.mscr」をダウンロード

インストールと使い方

前回のエントリを参照の上Bluetooth PANを設定。MortScriptのPPC版をインストールします。個別にダウンロードするようにはなっておらず、zipの中にOS別に数種類入っています。

僕はページ下部のリンクTemporaryからたどってダウンロードできるV4.11b7を使っています。

あとはスクリプトをダウンロードして実行するだけですが、実行に手間をかけていては本末転倒ですので、最も効率的な実行方法を模索してください。

前述の通り、僕はSortInchKeyで、このスクリプトをSoftKey2のダブルクリックに設定しています。

画面の解像度等に依存するため、RealWVGA化や、フォントサイズの変更などをしていると動かないと思います。

ソースコード

サブルーチン「POff」の「PowerOff」はコメントアウトしていますが、外してもいいかも?

#
# Helper script for ICS via Bluetooth PAN
#
# Use MortScript V4.11b7
#

######### Global Variable definition #########

Global(AppName, AppPath, MannerMode)

AppName = "インターネット共有"

AppPath = "\Windows\IntShrUI.exe"

MannerMode = RegRead("HKCU",\
		"\Software\Sharp\PhoneStatus",\
		"Status3")

######### Entry Point #########

Call("Main")

######### Subroutine definition #########

# メイン
Sub Main
	# インターネット共有を起動し
	# 前面に出るまで待つ
	Call("Activate")

	# Bluetooth PANの項目が現れるまで
	# タイムラグがあるので待つ
	Sleep(1000)

	# 接続が無い状況を確認
	IF(WindowText(60, 120) eq "切断完了")
		# Bluetooth PANの存在を確認
		Call("BluetoothCheck")
		# 「接続」ボタンを押して、進捗確認
		# SoftKeyの文字はWindowText()で
		# 読み取れないようなので、みなし
		Call("POn")
	Else
		# 接続中であることが想定されるので
		# 「切断」ボタンを押して、進捗確認へ
		# SoftKeyの文字はWindowText()で
		# 読み取れないようなので、みなし
		Call("POff")
	EndIF
EndSub

# インターネット共有の起動と起動チェック
Sub Activate
	# インターネット共有の起動
	Run(AppPath)
	# インターネット共有が前面になるのを待つ
	WaitForActive(AppName, 4)

	# 起動に失敗しているようなら終了
	If(NOT wndExists(AppName))
		Call("ErrorSound")
		Message(AppName & "が^CR^^LF^起動できないようです")
		Exit
	EndIf
EndSub

# Bluetooh PANの有無のチェック
Sub BluetoothCheck
	btstatus = RegRead("HKLM",\
		"\System\State\Hardware",\
		"Bluetooth")

	Switch(btstatus)
		Case(0, 8)
			Call("ErrorSound")
			Message("Bluetoothが^CR^^LF^使用不能です")
			Exit
	EndSwitch

	# Bluetooth PANが無ければ
	IF(WindowText(60, 240) eq "USB")
		# リストボックスの下の項目を選択してみる
		MouseClick(AppName, 60, 240)
		SendSpecial("Down")
		SendSpecial("CR")
		Sleep(100)
		# それでもBluetooth PANでなければ終了
		IF(WindowText(60, 240) eq "Bluetooth PAN")
			# nop
		Else
			Call("ErrorSound")
			Message("Bluetooth PANが^CR^^LF^見つからないようです")
			Exit
		EndIf
	EndIf
EndSub

# 「接続」ボタン押しと、その後の処理
Sub POn
	Call("WSIMCheck")
	SendSpecial("LeftSoft")
	# W-SIMの接続が確立するまで待つ
	# 20秒でタイムアウト
	Repeat(20)
		status = RegRead("HKLM",\
			"\System\State\Connections\Modem",\
			"Count")
		If(status = 0)
			Sleep(1000)
		EndIF
	EndRepeat

	If(status = True)
		# 接続が確立したら
		ToggleDisplay(off)
		If(NOT MannerMode)
			PlaySound("\Windows\Alarm3.wav")
		EndIf
		Call("RepeatVibrate", 1)
	Else
		# 接続が確立しなかったら
			Call("ErrorSound")
		Call("RepeatVibrate", 2)
	EndIf
EndSub

# 「切断」ボタン押しと、その後の処理
Sub POff
	SendSpecial("LeftSoft")
	ToggleDisplay(off)
	If(NOT MannerMode)
		PlaySound("\Windows\Infend.wav")
	EndIf
	Call("RepeatVibrate", 3)
	#PowerOff
EndSub

Sub RepeatVibrate
	IF(argc = 1 and argv[1] > 0)
		For i = 1 to argv[1]
			Vibrate(200)
			IF(i < argv[1])
				Sleep(300)
			EndIF
		Next
	EndIF
EndSub

Sub WSIMCheck
	strength = RegRead("HKCU", \
	"Software\Sharp\ShPhoneLib", \
	"RFStrength")
	If(strength < 2 || strength > 6)
		Call("ErrorSound")
		Message("電界強度が^CR^^LF^弱いようです")
		Exit
	EndIf
EndSub

Sub ErrorSound
	If(NOT MannerMode)
		PlaySound("\Windows\spl_outofrange.wav")
	EndIf
EndSub

| | Comments (0) | TrackBack (0)

2008.05.09

[Windows Mobile]Windows Mobile向けQKC 1.0 (Quick KANJI code Converter C Version 1.0)正式公開

随分時間がたってしまいましたが、QKCの作者、佐藤公彦さんに許可をいただき、Windows Mobileで動作するQKCを正式に配布する運びとなりましたので、ここにご報告させていただきます。

佐藤公彦さんからは1年前にご快諾をいただいております。

QKCの移植にはCeGCCのランタイムなど本質的には必要無く、Win32ネイティブな実装が出てくるのではないか(あるいは.NETを使って自分で作ろうか)という思惑があり、動向をうかがっていたのですが、どうも無さそうなので踏ん切りを付けました。

この場をお借りして、佐藤公彦さんに感謝の意を表したいと思います。

QKCとは、文字コードの変換をしてくれるコマンドラインユーティリティで、Windows Mobileでは、EUC-JPやJIS等の文字コードが扱えないMortScriptとの連携利用において需要があります。
EUC-JPのWebページをダウンロードしてきて切り出し、QKCでSJIS等に変換した後、rlTodayを使ってTodayに表示する、というのが活用の典型例になるかと思います。

ダウンロード

以前の配布物を上書きする形で置いています。
以前の配布物とは、マニュアルの存在の有無の点のみ異なります。

http://moyashi.air-nifty.com/qkc-arm-wince-1.0.zip

説明

========================================================================

QKC -- Quick KANJI code Converter C Version 1.0

for Windows Mobile

説明書

========================================================================

◆ はじめに
-----------

 この配布物は、佐藤公彦さんが書かれたQKC--(Quick KANJI code
Converter)を、moyashi (http://moyashi.air-nifty.com/)がARM CPU搭載
Windows Mobile向けにコンパイルし、利用者の便宜を図って配布するものです。

 コンパイルにはCeGCC (http://cegcc.sourceforge.net/) を使用致しました。

◆ 問い合わせ先について

 当配布物は、佐藤さんの許諾に基づき、佐藤さんのかかわりの無いところで
moyashiが作成し、配布するものです。

 何か不具合があった場合でも、お問い合わせは私の方にお願い致します。

 佐藤さんへ問い合わせをすることはご迷惑になりますので、くれぐれもなさ
らないようにしてください。

問い合わせ先: hitoriblog[_AT_]gmail.com
([_AT_]を@に置き換えてください)

◆ 実行環境
-----------

 CeGCCのランタイムライブラリをインストールした、Windows Mobile搭載機 

 ※実質ARM CPU搭載のWindows Mobile搭載機に限ります

◆ インストール

 CeGCCに含まれるランタイムライブラリをインストールします。

 d:\cygwin以下にCeGCCの配布物を展開した場合は、必要なランタイムライブ
ラリは以下のパスに存在します。

d:\cygwin\opt\cegcc\arm-wince-cegcc\lib\device\cegcc.dll
d:\cygwin\opt\cegcc\arm-wince-cegcc\lib\device\cegccthrd.dll

 これらを\windows、ないしはqkc.exeと同階層に置いてください。

 qkc.exeは任意の場所にインストールしてください。

◆ 使用法
---------

 詳しくは公式の配布物をご参照ください。
 (http://hp.vector.co.jp/authors/VA000501/)

 Windows Mobile版独自の注意点は、標準入出力のサポートが不十分、という
ことです。

 標準の環境では、標準入出力の利用が不可能です。
 以下のページにあるpocketcon.rarをインストールすると利用可能となります。

 http://www.bluishcoder.co.nz/2007/02/factor-on-windows-mobile-5.html

 ただ、本配布物はqkcのファイル指向のインターフェイスを生かし、
MortScript (http://www.sto-helit.de/) の関数から呼び出す使用方法を想定
しているため、標準入出力の利用についてはあまり検証していません。

 MortScriptからは、例えば以下のように呼び出します。

pathToFile = "\path\to\filePath"
RunWait("\path\to\qkc.exe", "-s " & pathToFile)

Run()関数とRunWait()関数がありますが、Run()を使うとqkc実行完了を待たず
に次の処理へ行ってしまうため、通常は終了を待つRunWait()の方を使います。

空白を含むパスにあるファイルを処理する場合はダブルコーテーションでくく
る必要があります。MortScriptでは、ダブルコーテーションのエスケープ表現
は「""」です。

pathToFile = """\My Documents\text.txt"""

マルチバイト文字を含むパス、ファイルは処理できないようです。

QKCの主要オプションを抜粋して下記します。

-s to Shift-JIS
-e to EUC
-j to JIS

◆ その他
---------

 無保証の宣言、著作権の保持等については公式の配布物をご参照ください。
 (http://hp.vector.co.jp/authors/VA000501/

◆ 履歴
-----------

◇ 08/5/9

・一般公開。

| | Comments (0) | TrackBack (0)

2008.03.27

[Windows Mobile]CeGCC 4.3.0 initial testリリース

3月25日に、久しぶりにLinux等で動作するWindows Mobile用クロスコンパイラであるところのCeGCCのバイナリパッケージが更新されていたので、Ubuntu7.1にインストールしてみました。

ダウンロードはSourceForge.netから。「gcc 4.3.0 initial test」というやつです。

$ sudo tar xvzf cegcc-gcc430.tar.gz -C /
$ sudo apt-get install libgmp3-dev

以下を.bashrcに追記するなどでパスを通します。

export PATH=$PATH:/opt/cegcc/bin

なんかソースを書いてコンパイルしてみます。

$ arm-cegcc-gcc -enable-auto-import test.c
$ file a.exe
a.exe: MS-DOS executable PE  for MS Windows 32-bit

| | Comments (0) | TrackBack (0)

2007.09.15

[Windows Mobile]Advanced/W-ZERO3 [es]でGSFinderとPythonCE/ruby-mswinceを組み合わせて使う

PythonCEやruby-mswinceをAdvanced/W-ZERO3 [es]上で実用的に使おうと思うと、やはり不出来なコンソールが障害として立ちはだかります。

何とかPythonスクリプトやRubyスクリプトをうまく使う方法は無いもんでしょうか。
ということで、GSFinderを使う手を考えてみました。

着目したのはGSFinderにある「ファイル>送る」機能です。GSFinderで選択中のファイルをPython/Rubyスクリプトに送ることにします。

拡張子への関連づけを変更

スクリプトにGSFinderで選択したファイルを引数として渡すためには、拡張子の関連づけの内容を変更する必要があります。要するにコマンドラインの末尾に"%2"を付け加えます。

PythonCEの場合:

"\Program FIles\Python25\python.exe" "%1"

"\Program FIles\Python25\python.exe" "%1" "%2"

ruby-mswinceの場合:

"\microSD\Ruby\bin\ruby.exe" "%1"

"\microSD\Ruby\bin\ruby.exe" "%1" "%2"

こっちはユーザーごとに違うと思いますが。

引数を取るスクリプトを書く

PythonCEの場合は、以下のような感じです。
Shift-JISのテキストファイルを、EUC-JPに変換して別ファイルに書き出すという処理内容です。
GSFinderから渡された引数は、sys.argv[1]で参照できます。

#! /usr/bin/env python
# coding: utf-8

import sys
import codecs
import os

fin = codecs.open(sys.argv[1], 'r', 'shift_jis')
res = os.path.splitext(sys.argv[1])
fout = codecs.open(res[0] + '_euc' + res[1], 'w', 'euc_jp')
for line in fin:
fout.write(line)
fout.close()

ruby-mswinceの場合は以下のような感じでGSFinderから渡された引数が参照できます。

hikisuu = ARGV[0].split('"')[0]

なぜか「ファイル名→"→ゴミ文字列」とダブルコーテーションを挟んでゴミが後ろに付くので、splitでゴミを掃除してます。ファイル名にダブルコーテーションを含むことは許されていないので、一応大丈夫かと。
ただしこれは完全な対策ではなく、少なくとも半角カナがファイル名に交じる場合は変なことになるのは確認してます。cmd.exe&バッチファイル、PythonCE(MortScript、nScript/nScriptmも引数取れるかな?)でファイル名を書き出すなどワンクッション挟んだ方が確実かもしれません。

GSFinderの「アプリケーションの起動」の設定

「ツール>オプション>アプリケーションの起動」で指定したフォルダに、スクリプトのショートカットを作成します。
デフォルトは「\Windows\SendTo」だったかな。
任意の場所に置いた(スペースが含まれないパスがいいと思います)スクリプトをコピー(Ctrl+C)し、上記フォルダで「編集>ショートカットの貼り付け」をすると簡単です。

GSFinderを一度終了し、再起動すると、「ファイル>送る」の中にスクリプトが現れているはずです。
ファイルを選択し、スクリプトに「送る」とすれば、スクリプトでそのファイルが処理できます。

何が便利?

GSFinderに、いろんな機能を追加できるといった感じで考えるといいですね。
PythonCEなら、GSFinderで選択中のファイルをftpでアップしたりできます。
でもその用途ならSimpleUploaderが非常に便利だったり……。
事前処理をやってからアップ、となってくると意味が出てきますね。

GSFinderで選択したテキストファイルをどっかのWebページのフォームからSubmitしたりとか。
GSFinderで選択したテキストファイルに、ネット上から引っ張ってきたデータを追記したりとか。
GSFinderで選択した画像を、いきなり決まっただれかにメールしたりとか。
GSFinderで選択したテキストファイルに対して、定型の置換処理をしたりとか。

いろいろあるかと思います。

不具合

そもそもおかしいことだらけですが、拡張子の関連づけで"%3" "%4"などと引数を増やしても参照できる引数は一つだけです。PythonCEでもruby-mswinceでも、"%3" "%4"などと増やそうが増やすまいが、GSFinderから渡ってくるのはファイル一つだけ。PythonCEの場合は、2番目以降の引数には変な制御文字(?)が入ってきます。ruby-mswinceの場合は2番目以降の引数の中身はnilです。前述のように、ARGV[0]に、GSFinderから渡ってきたファイル名とゴミが交ざって入ります。

今自分が使っているGSFinderはごりぽんさんのGSFinder+ for W-ZERO3ですが、GSFinder+TQでも同じでした。

Windows Mobileネイティブな処理系、MortScript、nScript/nScriptmで引数を(受け取れるものなら)受け取って、書き出したファイル経由でPythonCE/ruby-mswinceに渡した方がいいのかもしれませんね。

多分続く

cmd.exe等との連携はテストしてみようと思ってます。

おまけ:PythonCEで標準出力をじっくり読む

PythonCEで標準出力に出力しても、コンソールがすぐ閉じてしまい読めません。
そういう場合は、

res = raw_input("Pause")

という一文を最後に書いておくとダイアログが表示され、コンソールがすぐ閉じず、標準出力をじっくり読むことができます。
ruby-mswinceの場合は、標準出力の具合がよろしくないので、素直にファイルに書き出して読みましょう。

| | Comments (2) | TrackBack (1)

2007.08.06

[Windows Mobile]Advanced/W-ZERO3 [es]のACアダプタEA-83の改造で電源問題解決

Advanced/W-ZERO3 [es]、とても気に入ってます。
WILLCOMさん、SHARPさん、こんなに素晴らしいデバイスを本当にありがとうございます。

ただ、Advanced/W-ZERO3 [es]の独自規格電源コネクタは本当にイヤですね。

というわけで、ACアダプタEA-83を改造して、EIAJ #2変換アダプタを作りました。
EIAJ #2のオスとメスを買ってきて、ぶった切ったAdvanced/W-ZERO3 [es]用のACアダプタのケーブルの中間に挿入する作戦です。

ミヤビックスからAdvanced/W-ZERO3 [es]用のリトラクタブルシンクチャージケーブルが出る予定ですが、より電源供給源が多くなるので、作っておくのも悪くないかと。

これでZaurus用に買った電源資産がそのまま流用できます。

下手を打つと火災の危険がありますので、フォロワーの方はくれぐれも注意してください。
結果についての責任は負えません。

部品の入手(8.17追記)

リンクを張ってくださってる記事をリファラたどって読むと、部品が入手できない、などとおっしゃる方がいらっしゃるようですね。
でも、そんなことはありませんよ。

http://www.marutsu.co.jp/user/shohin.php?p=3574
http://www.marutsu.co.jp/user/shohin.php?p=5976

独自端子 to EIAJ #2アダプタを作る

↓材料、EIAJ #2のメス。150円ぐらい。

↓Advanced/W-ZERO3 [es]用の電源アダプタ、EA-83をぶった切ります。

↓独自端子側の被覆をこんな風に剥ぎます。

↓さらにこんな風に加工。ちょっと半田を付けてあります。

↓端子に半田付け。これをやる前に、外側のカバーをケーブルに通しておくのを忘れずに(笑)。

↓端子の根元を電工ペンチでかしめる。普通のペンチでやった方がいいかも。

↓で、こんな感じ。万が一のショートを避けるためにもグルーガンで補強をした方がいいでしょう。

↓外側のカバーを締めたら出来上がり。

↓完成写真1(ギリギリの短さなので、試す場合はもう少し長めにした方がいいかも。

↓完成写真2

EA-83にEIAJ #2端子をくっつける

ぶった切ったままだとEA-83は何の役にも立ちませんので、EIAJ #2端子をくっつけます。

↓材料、EIAJ #2のオス。これも150円ぐらいだったかな。

↓要領は同じです。こんな感じで半田付け。これをやる前に外側のカバーをケーブルに通しておくのを忘れないこと(笑)。

↓根元を電工ペンチでかしめる。ラジオペンチでやった方がいいでしょう。

↓半田付け個所の先っちょをニッパーで切断。万が一のショートを避けるためにもグルーガンで補強をした方がいいでしょう。

↓外側のカバーをねじ込んだら完成。

で……

こうしておくと、電源確保に困ることが少なくなります。

↓自作EIAJ #2 to USB充電ケーブル。OK。

↓ミヤビックスのシンクチャージケーブル。使えます。

↓AC100V to USBアダプタもくっつく。

↓乾電池 to USBケースも使えます。

↓充電は検証してませんが、一応LED点灯しました。

| | Comments (0) | TrackBack (0)

2007.08.01

[Window Mobile]Advanced/W-ZERO3 [es]でVBScriptとJScriptを走らせる

Advanced/W-ZERO3 [es]でVBScriptとJScript(JavaScript)を実行する方法があったので紹介します。

Micro Script Hostのインストール

newObjects (ZmeY soft)のトップページから「Products>ActiveX Components>newObjects ActiveX Pack1 (AXPack1)」とたどり、「newObjects ActiveX Pack1 (AXPack1)」のページまで来ます。

ここにある「CAB (Pocket PC ARM)」をダウンロード(ファイル名は ActiveXPack1.PPC_ARM.CAB)、Advanced/W-ZERO3 [es]にインストールします。

vbscript.dllのインストール

これだけだとJScriptしか使えない(jscript.dllは最初っから入ってます)ので、VBScriptが使えるようにvbscript.dllをインストールします。

vbscript.dllは主にeMbedded Visual Basic 3.0のランタイムとして存在します。

eMbedded Visual Basic Runtime for Windows Mobile-based Pocket PC 2003

上記ページから「msvbppc.armv4.cab」をダウンロードし、インストールします。

msvbppc.armv4.cabにはvbscript.dllは入ってないそうです。

NS Basic/CEのランタイムをインストールするのが近道ですね。

ドキュメントのダウンロード

「newObjects ActiveX Pack1 (AXPack1)」ダウンロードの「ALL DOWNLOADS」をクリックすると現れる
NDL(newObjects Development Library)をダウンロードします。解凍するとchm形式のヘルプが出てきます。詳細なるマニュアルなのでよく読みましょう。

マカーなら、Chmoxで読めます。

IWAの日記さんによると、デバイス上でもCHMReader.Netで読めるそうです。

拡張子の関連付け

拡張子vbsとjsを/Program Files/AXPack1Family/nwmicrohost.exeに関連付けます。
PocketTweakを使うといいでしょう。

コマンドラインはvbsもjsも以下のような感じです。

"\Program Files\AXPack1Family\nwmicrohost.exe" "-nohelp" "%1"

使い方

/Program Files/AXPack1Family/nwmicrohost.exeを起動するとコンソールのようなものが起動するので、メニューの「Run」を実行、書いたスクリプトを指定。これでスクリプトを実行できます。
開く種類を「JScript」と「VBScript」から選べます。

通常は拡張子の関連づけをした上で、GSFinder等から実行する方がいいかと思います。
ウインドウを開かずにスクリプトを実行する方法があるかどうか、調査中。

スクリプトの例

VBScriptの例です。テキストエディタで拡張子vbsのファイルとして保存し、実行します。

'変数宣言の強制
Option Explicit

Host.Msg("VBScriptキター!!")

Dim a, i

a = Abs(-3)
Host.Msg(a)

For i = 0 To 10
Host.WriteLine("キター " & i)
Next

Host.WriteLine(Now)

Host.WriteLine(Len("あいう"))

'Host.Exit

以上。
JScriptの例は、要するにJavaScriptです。サンプルも付いているので、ここでは割愛します。

実は、僕はeMbedded Visual Basic Runtimeのでなく、NS Basic/CE 7.0のランタイム付属のvbscript.dllを使っているので、上記のサンプルは一部動かないかもしれません。
そう、NS Basic/CE 7.0のvbscript.dllでも動きます。NS Basic/CE 7.0のプロシージャやオブジェクトが使えるといいんですけどね。

総括

AXPack1にはSQLite3をはじめ、ネットワーク系のオブジェクトなどギッチリ詰め合わせになっていて、相当いろいろできそうです。
NS Basic/CE 7.0のランタイムをチャンポンにすることで、NS Basic/CE 7.0由来のプロシージャ、オブジェクトが使えるとおいしいかも(ちなみに僕はNS Basic/CEの正規ユーザーです)。

何か分かったら教えてください。

余談

その昔、bSquareからbUSEFUL Utilitiesというソフトが出てたんですよね。(参考)

これに含まれていたbUseful Scriptは、VBScriptとJScriptを実行できたようです。
サスペンドから起きてタスクを実行できるbUseful Schedulerと組み合わせると、かなり高度なことができたと思います。

当時僕はhp 200LXからjornada720に乗り換えたところで、何もできないjornada720の環境を劇的に改善するものとしてすごく欲しかったんですが、結局買わず仕舞い。

| | Comments (0) | TrackBack (0)

[Window Mobile]WX310K(京ぽん2)からAdvanced/W-ZERO3 [es]にアドレスとブックマークを転送

Advanced/W-ZERO3 [es]を買って以来、どうでもいいことばっかりやっていたので、そろそろ実用に具するよう環境整備することに。

WX310KからAdvanced/W-ZERO3 [es]にアドレスを移植

まずはWX310Kこと京ぽん2からアドレスを移植しよう。

WILLCOMのH"問屋で京ぽん2のアドレスデータを受信し、CSVに書き出し。

それを、Advanced/W-ZERO3 [es]にコピーし、アドレス帳CSVコンバータ(POCSV)で連絡先にインポート。
何の問題も無し!!

WX310KからAdvanced/W-ZERO3 [es]にブックマークを移植

今度は京ぽん2からブックマークを移植しよう。

同じくH"問屋で京ぽん2のブックマークをCSVとして書き出せるが、これをAdvanced/W-ZERO3 [es]にインポートする手段があるのかよく分からない。

折角なので、インストールしたruby-mswinceに役立ってもらうことに。
ということで、以下のようなRubyスクリプトを書いた。電車の中で書いていると充実した気分になる(笑)。
H"問屋で書き出したブックマークのCSVから、*.url(インターネットショートカット?)をブワーと生成するというもの。
これでブックマークの移行もOK。
ZERO3では位置情報コンテンツが使えないのは痛いね。何か手があるのかな。

普通のRubyで動くはずだけど、文字コードを変換していないので非Windowsで実行すると文字化けで大変かも。

#!/usr/bin/env ruby

require 'csv'

#H"問屋から書き出したブックマークのCSVファイル
csv_file = "/My Documents/kyopon2-url.csv"
#書き出し先のディレクトリ
out_dir = "/Temp"

out_folder = "#{out_dir}/out"
while File.exists?(out_folder)
out_folder += "_"
end
if not File.exists?(out_folder)
Dir.mkdir(out_folder)
else
puts "Specified directory or file already exists."
exit()
end
begin
CSV.open(csv_file, 'r') do |row|
fp = open("#{out_folder}/#{row[0].gsub(/[:\\\/]/,'_')}.url", "w")
fp.puts('[InternetShortcut]')
fp.puts('URL=' + row[2])
fp.puts('Hit=1')
fp.close()
end
rescue
puts "File open error."
end
exit()

| | Comments (0) | TrackBack (0)

2007.07.30

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

ここのところ、Advanced/W-ZERO3 [es]でのセルフプログラミング用言語の探索をしてます。

ZaurusではRubyを使っていますが、ruby-mswinceはsocket(ネットワーク系機能)が使えないのが残念だったので、別のプログラミング言語を調べ、PythonCEに行き着きました。
これが予想外にとても使えるものだったのでホクホク。
Advanced/W-ZERO3 [es]でも問題無く使えているよう。

インストールはcab一発。
今なら、「PythonCE-25-20061219.PPC2003_ARM.CAB」というファイルをインストールすればOK。

PythonCEを一度起動すると、拡張子pyへの関連付けがなされるようです。
Pythonスクリプトを拡張子pyのファイルとしてエディタで作れば、Explorer等から実行可能です。

PythonCEは独自にコンソールを実装しているので、cmd.exeを使う場合に問題になる、エラーメッセージが読めないというトラブル、標準出力に表示しなくなってしまうトラブルと無縁。

Python2.5がベースになっていてcodecsが標準で添付されており、日本語への対応OK。
内部処理はasciiかunicodeですが、shift_jisやeuc-jpなどの読み書きが可能。socketも動作を確認。

EmacsCEにpython-mode

Pythonのソースを書くには、python-modeを使うと便利。これをEmacsCEで動かします。

解凍して出てきた*.elをsite-lispにコピー。
EmacsCEには(というか、Emacs20.7には)python-modeに必要なansi-color.elが入っていないので、www.emacswiki.orgからもらってきて、site-lispに入れたらすんなり動きました。
ただ、EmacsCEではMule-UCSが動かないので、utf-8でソースを書けないのが困りもの。

普通は母艦でスクリプトを書いて、それを持ってくる方がいいと思いますが、Mac OS X Tiger標準のPythonはcodecsにshift_jis、euc_jpが入ってなかったりしたので2.5を入れて環境を合わせました。

マニュアルを用意

PyJUGに日本語マニュアルあり。
html版のアーカイブをダウンロードし、microSDに入れておき、ブックマーク。

動作確認スクリプト:Webページを取ってきてテキストファイルとして保存

import httplib, codecs, re

conn = httplib.HTTPConnection('www.google.co.jp', 80)
conn.request("GET", "/index.html")
res = conn.getresponse()
conn.close

body = res.read().decode('shift_jis')
body = re.sub("<.+?>", "", body, 0)
body = re.sub("&nbsp;", " ", body, 0)
body = re.sub("&copy;", "(c)", body, 0)

fout = codecs.open('/google.txt', 'w', 'shift_jis')
fout.write(body)
fout.close

動作確認スクリプト:Webページの一部を抜き出す

Rubyで言うところのopen-uriのようなurllibを使えば、より簡単にページを取得できます。

スクレイピングをするBeautifulSoupというライブラリがあり(sh1.2さんの紹介記事)これも動作しました。
こういう非標準ライブラリは、Libディレクトリに入れておくと使えるようになります。
最初に使われるときに、バイトコンパイルされるようですね。

ページ中のリンクを集めてファイルに書き出す処理です。

import urllib
from BeautifulSoup import BeautifulSoup

URL='http://www.google.co.jp/'
b = BeautifulSoup(urllib.urlopen(URL))

urls = []
for i in b.findAll('a'):
try:
if i.attrs[0][0] == 'href':
urls.append(i.attrs[0][1])
except IndexError:
continue

fout = open('/urls.txt', 'w')
for u in urls:
fout.write(u + "\n")
fout.close

動作確認スクリプト:メールを送る

SMTP認証あり、Message Submissionの例。
日本語のメールを送ることも可能と思われます。
PythonCEには、Pythonの一般事例がそのまま適用できるようなので、情報には事欠かないでしょう。

import smtplib

server = smtplib.SMTP('SERVER_ADDRESS', 587)
fromaddr = 'FROM@ADDRESS'
toaddr = 'TO@ADDRESS'
msg = 'PythonCE test'

server.login('USER_NAME', 'PASSWORD')
server.sendmail(fromaddr, toaddr, msg)
server.quit()

総評

立派なオブジェクト指向言語。ネットワークへの対応もバッチリ、日本語の読み書きもOKということで、かなり実用的と感じました。国内でももっと使われていいんじゃないでしょうか。
今回インストールしたPythonCEにはsqlite3.dllが添付されていて、sqlite3をimportできたので標準で使えるようです。かなり便利そう。

MortScriptやnScript/nScriptmと比較した場合、Windows Mobileにフォーカスした関数が乏しいのがウィークポイントですが、それを補ってあまりある基本機能とドキュメント、ライブラリ、情報があるので、必ずやAdvanced/W-ZERO3 [es]の力になってくれるはず。
足りないところはMortScriptと組み合わせて補うと、案配がいいんではないかと。

Win32apiのwrapperをPure Pythonで書けるようです。PythonCEにはwin32clipboardが無いんですが、クリップボードへのアクセスも拡張できるんですかね。

| | Comments (5) | TrackBack (0)

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は、しばらく使っていると標準出力に何も出力しなくなり、直すにはリセットするしか無いよう。
横スクロールができず、折り返しもしないのでエラーメッセージが読めず非常に具合が悪いです。

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

| | Comments (0) | TrackBack (0)

2007.07.22

[Windows Mobile]Advanced/W-ZERO3[es]と京ぽん2の周波数特性測定

これまでのW-ZERO3シリーズは再生音のサンプリングレートが22kHzで、音が悪いのが不満でした。
通常のオーディオ機器のサンプリングレートは44.1kHzなので、半分しかありません。

Advanced/W-ZERO3[es]の再生音の質はどうなんでしょうか?
目に見えないものゆえ諸説紛々で、聞きづてでは見えてきませんでした。

僕もAdvanced/W-ZERO3[es]を買ってきたので、EDIROL FA-66をノーパソにつないで、WaveSpectraで特性を見てみました。
接続は以下の通りです。

Advanced/W-ZERO3[es]-->平型toミニプラグアダプタ-->ミニプラグtoRCAピンケーブル-->EDIROL FA-66-->Firewireケーブル-->PC

Advanced/W-ZERO3[es]には、WaveGeneで生成した16bit 44.1kHzの1Hz〜20kHzのスイープ信号のWAVファイルと、通常の楽曲のMP3をWMPで再生させました。
WMPで最大音量にて再生させ、WaveSpectraにて-40dbを指すようEDIROL FA-66のアッテネータでレベル調整しました。
Advanced/W-ZERO3[es]システム音量は最大の一つ手前(デフォルト)でした。

デフォルト状態での周波数特性

まずはデフォルト状態の周波数特性を見てみることにします。
再生すればすぐ分かりますが、結論から言うとデフォルト状態ではサンプリングレートは22kHzです。

↓デフォルト状態で1Hz〜20kHzのスイープ信号を再生
Freq-Adv-Z3-Sweep-Before

やはり11kHz止まりで、それ以上の周波数を再生する部分では折り返しが聞こえます。

↓デフォルト状態で普通の楽曲を再生
Freq-Adv-Z3-Perfume-Before

普通の楽曲を再生させても同じです。

サンプリングレート22kHzでは単に高域が削がれるばかりか、音がボソボソとして荒く、鑑賞に耐えるものではありません。

\Windows\use44khz.exe実行&リセット後の特性

Advanced/W-ZERO3[es]の\Windowsディレクトリには、「use44khz.exe」という実行ファイルがあります。
これを実行すると以下のようなダイアログが出ます。「はい」と答えてリセットします。その後にさきほどと同じファイルを同様に再生するとどうなるでしょうか。

Use44Khz

↓use44khz.exe後に1Hz〜20kHzのスイープ信号を再生
Freq-Adv-Z3-Sweep-After

↓use44khz.exe後に普通の楽曲を再生
Freq-Adv-Z3-Perfume-After

use44khz.exe前は再生できなかった20kHzまでの高域が再生可能となっています。

スイープ信号の11kHz以上再生時に聞こえた折り返しの音も聞こえません。
明らかに音質が向上しています。

ZERO3音質補完計画にあるGSM610.DLL導入も試してみました。

↓GSM610.DLL導入後に1Hz〜20kHzのスイープ信号を再生
Freq-Adv-Z3-Sweep-Gsm610-After

↓GSM610.DLL導入後に普通の楽曲を再生
Freq-Adv-Z3-Sweep-Gsm610-Perfect

聴感上も特性上も有意差を感じませんでした。
やる必要は無いものと思います。

「EnableLowPassFilterは低音をカットするフィルターのよう」という説明がありますが、ローパスフィルタといえば実際は逆で高音をカットするフィルタです。サンプリングレート44.1kHz時20kHz、サンプリングレート22kHz時11kHz以上の雑音の領域を切り落とす働きをするものと思います。
サンプリングレート22kHz時にEnableLowPassFilter 0をやると雑音が聞こえそうです。

Advanced/W-ZERO3[es]音質まとめ

・デフォルトはサンプリングレート22kHzで音が悪い。
・\Windows\use44khz.exeを実行&リセットするとサンプリングレートが44.1kHzになり音が良くなる。
・use44khz.exeを実行&リセットすればGSM610.DLLの導入は不要

ただ、位置づけとしては隠し設定になっていることから、何らかのデメリットが発生しておかしくないです。

Advanced/W-ZERO3[es]の音はいいか?

use44khz.exe&リセット後は、不満を持つ人が少ないであろうレベルです。

use44khz.exeは旧機種で有効か

use44khz.exeは以下のレジストリを書き換えるだけのようなので、旧機種では無効でしょう。
また、実際に移植した人の話では、実行できないそうです。

HKEY_LOCAL_MACHINE\Drivers\BuiltIn\WaveDev\ShConfig\Use44kHz

オマケ:京ぽん2(WX310K)の周波数特性

Advanced/W-ZERO3[es]への機種変更で灰ロムと化した京ぽん2ことWX310Kの周波数特性も見てみました。

Freq-Kyopon2-Sweep

一度聴いて二度とヘッドホンをつなぐのをやめた、スカスカ音の実態がこれです。

| | Comments (0)

2007.06.07

[Windows Mobile]ruby-mswince 1.8.6(070531)出てましたな

2007/05/31にuema2.さんのところでruby-mswince 1.8.6(070531)が出てましたな。
関連したエントリもありました。
Windows MobileにQtが移植中らしく、Ruby/QteがWindows Mobile上で動くようになる?

いじってみたいが、Windows Mobile 5搭載機種持ってないんですな……。
今日発表になるWILLCOMの新端末を買うことになるのだろうか。

| | Comments (0) | TrackBack (0)

2007.03.08

[Windows Mobile] Sigmarion III / jornada720でMortScriptを動かす

H/PCでもサスペンドから起きてQMAIL3で定期的にメールの送受信(定期巡回)ができたらどんなにいいことか、ということでMortScriptをH/PCで動かすべく頑張ってみました。

結果、NTT DoCoMo Sigmarion III、hp jornada720で動かすことができましたのでレポートしておきます。

まずはMortScriptの動作に必要なDLLは何か、という調査から。
僕がよく使う手である、GNU binutilsに収録されているstringsによるテキストの抜き出しを試みてみます。

strings MortScript.exe | grep dll >~/mortscript.txt

これは、ホーミンさんのサイトからダウンロードできるExecutabilty Check toolでチェック可能です。

COREDLL.dll
AYGSHELL.dll
cellcore.dll
CEShell.DLL
mfcce300.dll
ole32.dll
toolhelp.dll
WININET.dll

上記8つのdllがリストアップできました。これに依存しているんでしょう。

mfcce300.dllのダウンロード

詳しくは後述しますが、MortScriptの起動に必要なmfcce300.dllを置いておきます。

手元に無ければ、あるいは手元のmfcce300.dllではうまく動かない場合に使ってみてください。Pocket PC 2003用です。

「mfcce300.zip」をダウンロード

NTT DoCoMo Sigmarion IIIでのMortScriptの起動

MortScriptはWindows Mobile / Pocket PC用のアプリケーションなので、ホーミンさんのところに行ってダミーDll(H/PC2000以降用)を\Windowsに入れておきます。ROM上に既にあるファイルは入れ替える必要はありません。

GSFinder+TQでROMファイルを含む全ファイルを表示し精査していくと、ダミーDLLを入れてなおmfcce300.dllが足りないことが分かります。

HDDをあさってみると、Pocket PC 2003 SDKの中にmfcce300.dllがありました。パスで言うと以下です。

"C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Mfc\Lib\armv4\mfcce300.dll"

これをSigmarion IIIの\Windowsに入れてみました。

MortScriptのcabは、Sigmarion IIIでは例によってCabPatcherでパッチを当てないとインストールできないので、処置しておきます。MortScriptの配布アーカイブの中にはcabのほか生でファイルが入っていますが、拡張子の関連付けのこともあるので、cabからインストールした方がいいと思います。

パッチを当てたらインストール。MortScriptはSDではなく、RAMの方にインストールしてください。

これで起動できました。RunAt()、Message()、PlaySound()、PowerOffなど試してみましたが、動きました。

既にH/PC用のmfcce300.dllを使っている場合、これに入れ替えるとほかのアプリケーションの動作に支障が出るので、続いて説明するjornada720の場合と同様、MortScript.exeのあるディレクトリにmfcce300.dllを入れて、ほかのアプリケーションが使わないように隔離するか、ホーミンさんのExecutabilty Check toolでMortScript.exeを、例えば「mfcce30p.dll」を読むよう書き換え、「mfcce30p.dll」にリネームしたPocket PC 2003用mfcce300.dllを\Windowsに共存させる、といった手を使って問題を回避してください。(ホーミンさんアドバイスありがとうございます)

これは既に確立されたTIPSのようですね。

hp jornada720でのMortScriptの起動

Sigmarion IIIと同じく、ホーミンさんのダミーDLLを\Windowsに入れます。既にROM上にあるファイルは入れなくて大丈夫です。

jornada720にはmfcce300.dllが\Windowsに最初から入っています。ROM上にあるファイルです。
ダミーDLLを入れると必要なdllはそろうので、MortScriptをcabからインストールします。
MortScriptはCFではなく、RAMの方にインストールしてください。

MortScript.exeを起動してみると、出るはずのダイアログが出ません。また、ハングアップしたようになってしまいます。

MortScript.exeと同じディレクトリにPocket PC 2003 SDKから抜いてきたmfcce300.dllを入れて、こっちを優先して使わせてみました。すると、起動できました。

\Windowsにmfcce300.dllをコピーできないjornada720の場合も、ホーミンさんのExecutabilty Check toolを使ってMortScript.exeを書き換え、リネームしたmfcce300.dllを\Windowsに置く手が使えます。

H/PCでサスペンドから起きての定期的メール送受信(定期巡回)

さて、これでMortScriptを動かす準備はできました。現時点での最新バージョン、RC11の起動を確認しています。

後は、以前のエントリ「Windows Mobile QMAIL3でサスペンドから起きて自動定期巡回(メール送受信)」を見て設定すれば、QMAIL3でサスペンドから起きての定期的メール送受信(定期巡回)ができると思いますよ!

常に最新のメールがInboxに入っていることになるので、H/PCのメール端末としての有用性は、これで100倍でしょう。

恐らく、jornada728、jornada710でも可能だと思います。

MortScriptをH/PCで動かすことに主眼を置いた説明することにも意味があると思ったのでこういったエントリにしてみました。

大体似たような内容を、「Sigmarion III / jornada720でもQMAIL3でサスペンドから起きて自動定期巡回(メール送受信)」とタイトルを変えて再度エントリしたいと思います。

| | Comments (2) | TrackBack (0)

2007.03.02

[Windows Mobile] Windows Mobile用クロスコンパイラ、CeGCC再び

以前のエントリCygwin/i386 Linux用Windows CE(PocketPC)クロスコンパイラCeGCCを試すの続編です。

そういえば、Cygwin / i386 Linuxで動作するARM CPU搭載Windows Mobile向けクロスコンパイラであるところのCeGCCの様子は最近どうかいな、ということで見に行ってみると、ちょうど2007年2月リリースのブツ0.10.0がアップロードされていました。

早速昨年10月にインストールした0.1.0と入れ替えてみました。

CeGCCのCygwin環境へのインストール

仔細は説明を省きますが、Cygwinをインストールします。その後に、

SourceForgeの当該ページへ行き、「cygwin binaries, svn 0.10.0.20070208」を落としてきます。

自分のとこではd:\cygwinがCygwinのルートなので、d:\cygwin\以下に上記のtarballを展開。
(以後、パスは自分の環境に読み替えてください)

展開すると、optから始まるディレクトリツリーが出来上がります。

~/.bashrcをいじるなどして、d:\cygwin\opt\cegcc\binにパスを通します。

自分の環境ではシンボリックリンク(0バイトのファイル)が機能していなかったので、それぞれ手動で実体と差し替えました。

シンボリックリンクはd:\cygwin\opt\cegcc\binに存在し、同一ディレクトリにあるツールや、d:\cygwin\opt\cegcc\arm-wince-cegcc\binにあるツールに向かって張られているようです。

要するにd:\cygwin\opt\cegcc\binにある0バイトのファイルの実体をd:\cygwin\opt\cegcc\binとd:\cygwin\opt\cegcc\arm-wince-cegcc\binから探して、シンボリックリンクの名前にリネームして置き換えるわけです。

もちろん、シンボリックリンクが機能する環境ではそんなことをする必要はありません。

いや、機能しなくとも、こんな頭悪くない解決策があるに違いません。

基本的に、これで基本的なインストールは完了(のはず)です。

Cのソースのコンパイルは、例えばtest.cというファイル名のソースを書いたとして、

arm-wince-cegcc-cc test.c -o test.exe

でできるはずです。

試しにQKCをコンパイル

QKCのソースがたまたまあったのでコンパイルしてみることにしました。

UNIX向けの「QKC - Quick KANJI code Converter C Version 1.0」というやつですね。
Makefileを編集して、コンパイラ指定を「CC = arm-wince-cegcc-gcc」に書き換えます。

そしてmake。何と! 何事も無かったようにコンパイルが通ります!

ActiveSync中のh2210にcecopyを使って出来たqkc.exeをコピー(いや別に普通の手段でファイルをコピーすればいいと思います)。

QKCを動かしてみる

CeGCCでコンパイルしたバイナリの実行にはDLLが必要です。

d:\cygwin\opt\cegcc\arm-wince-cegcc\lib\device\cegcc.dll
d:\cygwin\opt\cegcc\arm-wince-cegcc\lib\device\cegccthrd.dll

この二つのDLLをデバイスの\Windowsにコピーします。

とりあえずShift-JISで書いたテキストqkc.txtを用意して、MortScriptから実行してみます。

Run("\qkc.exe", "-e \qkc.txt")

確かにqkc.txtがEUC-JPにナッテル!!!

標準出力に表示されるヘルプなんぞを見たいなと思ってDOS窓Openをインストール。しかしqkc -Hしても何も表示されず。

どうやら、PocketConsoleを使うといいようです。(参考)

PocketConsoleをインストールしたら、\Windows\CMD.exeを起動します。

qkc -H

ヘルプ出ました! やべー、マジやべー普通に使えてます。

20070302054020

type qkc.txt | qkc -s >qkc2.txt

パイプ、リダイレクト、使えてます。typeなんて使ったの何年ぶりだよ。

その他の戦績

Debian JPのsed-ja-3.02.orig試しました。

CC=arm-wince-cegcc-gcc ./configure --host=arm-wince

でmake。とりあえず動きました。

echo test | sed -e 's/^.//'

est

p2conv試しました。

CC=arm-wince-cegcc-gcc

コンパイルできたっぽいです。

nkfコンパイルを試しました。MakefileのCCを

CC = arm-wince-cegcc-gcc

に書き換えてmake。コンパイルは通りましたが、出力が空です。正常な動作をしません。
ヘルプは表示されたので、スクリーンショットを貼っておきます。

20070302054059

wgetのコンパイルを試しました。

CC=arm-wince-cegcc-gcc ./configure --host=arm-wince

でとりあえずやってみました。コンパイルは順調に進むものの、リンク段階でundefined reference toが出ます。何のリンクが必要なんだ?

host.o:host.c:(.text+0x8a0): undefined reference to `__h_errno_location'

あとがき

分からない人には全く分からないでしょうが、これはかなり楽しいことになってきました。

ハードルの高くなさそうなもののコンパイルを試してみたいと思います。

| | Comments (4) | TrackBack (0)

2007.03.01

[Windows Mobile] Windows Mobileでも英文音声合成ソフトウェアfliteで遊ぶ

Windows Mobile / Pocket PC / Window CEでも音声合成がやりたくなり、EmacsCEの作者で有名なRainerさんがポートした英文音声合成ソフトウェアfliteを使ってみました。
EmacsCEが動くなら、恐らくfliteもW-ZERO3で使えるのではないでしょうか。

サンプル音声

iPAQ h2210上で読み上げたものを置いておきます。

Pocket PCで再生すると切れませんが、Mac OS X上のFirefoxから再生すると後ろが切れますな。
変換が必要かも……。

You need more practice.

Alice Through the Looking Glass

GNU is Not UNIX

The GNU Project was launched in 1984 to develop a complete UNIX operating system which is free software: the GNU system. (GNU is a recursive acronym for “GNU’s Not UNIX”; it is pronounced “guh-noo.”)

Variants of the GNU operating system, which use the kernel Linux, are now widely used; though these systems are often referred to as “Linux”, some say they are more accurately called GNU/Linux systems because of the suite of GNU tools they use.

サンプルスクリプト

fliteはコマンドラインインターフェイスであるため、MortScriptから呼び出して使ってみます。

サンプルをいくつか書いてみましたので参考にしてみてください。

(1) クリップボードの英文を読み上げる
「FliteClip.mscr」をダウンロード

(2) 英文のテキストファイル「\FliteFile.txt」を読み上げる
「FliteFile.mscr」をダウンロード

(3) 英文のテキストファイル「\FliteFile.txt」を読み上げたものをwavファイルに保存する
「FliteFile2Wav.mscr」をダウンロード

(4) 現在時刻を英文で読み上げる
「FliteWatch.mscr」をダウンロード

fliteのインストール

fliteをインストールします。

General Paranoyaxc Softwareにあるfliteのページから、flite-wince-arm-hpc-wce300.tar.gzcelib-3.13-dll-bin-all-platforms.tar.gzをダウンロードしてきます。

flite-wince-arm-hpc-wce300.tar.gzからは、

flite.exe
flite.dll

を。celib-3.13-dll-bin-all-platforms.tar.gzからは、wince-arm-pocket-wce300-releaseフォルダの中の、

celib.dll

を取り出してきて、三つまとめて「\SD Card\FLITE\」にコピーします(上記スクリプトのデフォルトパス。異なる場所にインストールする場合はスクリプトの該当個所を書き換えてください)。

既にEmacsCEなどを使っていて、celib.dllを\Windowsディレクトリにコピーしている場合はcelib.dllは必要ありません。

ほとんどの人はARM CPUのマシンをお使いでしょうから、それを前提に説明しています。
MortScriptはARM用しかありませんが、fliteは各種CPU用がありますので、ARM CPU搭載機種以外でも使うことができます。

MortScriptのインストール

Downloads - MortScript (PC, PPC, Smartphone, PNA): ProgramからMortScript 4.0 RC10(現時点最新バージョン)をダウンロードしてきてPPC用をインストールします。
拡張子mscrのファイルがMortScriptに関連づけられるので、以降スクリプトの実行はダブルクリック等でできるようになります。

実際に試してみる

ここまで来たら、後はスクリプトを実行するだけです。

(1) クリップボードの英文を読み上げる

クリップボードに英文をコピーして実行してください。

(2) 英文のテキストファイル「\FliteFile.txt」を読み上げる

ルートディレクトリに「FliteFile.txt」という名前の英文テキストファイルを用意し、実行してください。

(3) 英文のテキストファイル「\FliteFile.txt」を読み上げたものをwavファイルに保存する

ルートディレクトリに「FliteFile.txt」という名前の英文テキストファイルを用意し、実行してください。
wavファイルのファイル名を問い合わせるので入力してください。
ルートディレクトリにファイルを保存します。

(4) 現在時刻を英文で読み上げる

ただ実行するだけで時刻を読み上げます。

注意点

スクリプト中では対策してますが(対策というか、エラーを出してます)、fliteは空白を含むパスにあるファイルを読むことができないようです(バックスラッシュでエスケープしてもだめ)。

「\My Documents」以下とかでもだめ。

改行を含まないテキストファイルを読むこともできません。(-tオプションを伴うテキストを読むことは可能)

あとがき

本当はQMAIL3で着信メールのアドレスを読み上げたかったのですが、Windows Mobile / Windows CE上ではQMAIL3のマクロから外部コマンドを実行できるんですかね?
Win32ではWSHのShellオブジェクトを呼び出して実行する手が使えるようですが。

ご存知の方がいらしたら、ぜひ教えてください。

| | Comments (2) | TrackBack (0)

2007.02.28

[Windows Mobile] MortScriptで遊ぶ

昨日に引き続きMortScriptネタ。

Window関連の関数を使うと、MortScriptでAppleScriptで言うGUI Scriptingみたいなことができます。

SNTPクライアントのコンパネであるところのGreenSoftwareさんのgstadjust.cplによる時刻合わせを自動化してみることにしました。

「gstadjust.mscr」をダウンロード

ネットワーク非接続時はダイヤルアップ

gstadjust.cplを起動

ボタン押す

処理中は待ち

処理が終わったらまたボタン押してウインドウ閉じる

このスクリプトでダイヤルアップしていた場合は
ダイヤルアップ切断

といった流れ。処理中はボタンのテキストが「キャンセル」になるということを利用して、ダイヤルアップ切断までの待ちのタイミングを作っているのがポイント。
座標で指定してそのポイントにあるコントロールのテキストを読むので、画面サイズや向きに依存するはずです。
自分はiPAQ h2210を使っているので、QVGA縦が前提の動作しか書けませんが。
screen()という関数で判定できるので、対応は可能です。

>screen landscape|portrait|vga|qvga
>Checks whether the display is in the given mode.
>Be aware "screen vga" will be true if a VGA display is used, no matter if "double resolution"
>(WM2003 SE default) or "real VGA" (SE_VGA, OzVGA, ...) is used.

x = screen("qvga")
y = screen("vga")

をh2210で実行するとxに1、yに0が代入されます。

| | Comments (0) | TrackBack (0)

2007.02.27

[Windows Mobile] QMAIL3でサスペンドから起きて自動定期巡回(メール送受信)

かねてより、Windows Mobile / Pocket PC等でサスペンドから自動的に起きて(レジュームして)、メールソフト(僕の場合主にQMAIL3)にて自動定期巡回(間欠巡回)をしたいと思っていました。

Windows Mobile内に常に最新メールが入っていると、利用価値が飛躍的に高まるからです。
メールを見たいと思ってから受け取るのでは遅いのです。

QMAIL3(や、そのほかのメールソフト)の自動巡回機能はサスペンド中は機能しません。

Windows Mobile / Pocket PC / Win32等で動くインタプリタ「MortScript」で、サスペンドから起きつつ巡回、ということが実現できたので、スクリプトを置いておきます。

以前エントリしたZaurusでCronInetとMewによるメールの定期巡回のWindows Mobile版ですね。

「AutoMail.mscr」をダウンロード

「AutoMailUnReg.mscr」をダウンロード

免責

責任は取りません。

スクリプトの性質上、WM5以前の機種では最悪RAMが飛ぶとかいうことは起き得ます。

能書き

今はW-ZERO3があり、メールを受動的に受け取れますが、僕はh2210をずっと使っているので恩恵にあずかれていません。

これを使うと、設定した間隔を置いて、

サスペンドから起きる

QMAIL3が実行中かどうか判定

バッテリの残量が指定%以上になっているか
もしくは外部電源供給されているか判定

巡回開始

ということが繰り返せます。例えば、30分ごとに巡回するよう指定した場合、30分ごとにWindows Mobileデバイスがサスペンドから起きて、QMAIL3でメールの送受信が自動的にできます。

手元にはCASSIOPEIA E-2000とiPAQ h2210しか無いのですが、それらでは動作しています。
意味があるか分かりませんが、W-ZERO3などでも動くと思います。

インストール

※すべてのファイルはパスに日本語が使われていない場所にインストールした方がいいと思います。

MortScriptのインストール

上記のスクリプトはMortScript用なので、MortScriptをインストールします。
RAMないし、サスペンドからの起き抜け実行でも不安定でない場所にインストールしてください。

mort.sto-helit.deへ行って現時点の最新版MortScript 4.0 RC9、もしくは「Temporary」からダウンロードできるMortScript RC10 (Test)をダウンロードしてきて、PPC用をインストールします。

QMAIL3のインストール

QMAIL3が動くように設定します。外部ストレージの寝起きが悪い機種では、これも実行ファイルはRAMないし内蔵メモリにインストールしましょう。Mailディレクトリは外部ストレージでも問題無いと思います。

QMAIL3の「巡回」の設定

QMAIL3の「ツール>同期>巡回>巡回」を設定します。設定項目のダイヤルアップでは「ネットワークに接続していないときにダイヤルアップ接続する」を設定しておきます。このスクリプトではダイヤルアップの接続/切断を面倒見ません。「自動巡回」ではなく「巡回」の方なので注意してください。
巡回名は、念のため1バイト英字のみで付けておいてください。

本スクリプトのインストール

上のリンクから「AutoMail.mscr」、「AutoMailUnReg.mscr」をダウンロードしてきます。
中身はShift-JIS、CR+LFのテキストです。

これを、とりあえず「\Program Files\MortScript\」にコピーします。
二つのスクリプトを起動しやすいようにLauncher、スタートメニュー等に登録します。

スクリプトの設定

「AutoMail.mscr」をテキストエディタで開くと、以下のような部分を見つけることができるはずです。巡回名の方は、さきほど設定した巡回の名前です。ダブルコーテーションで囲む必要があるので注意してください。

# Configure ########

# QMAIL3で実行する巡回名
s_course = "YOUR_COURSE_NAME"

# QMAIL3のパス(フルパス指定)
s_qmail3 = \
"\Program Files\QMAIL3\Q3U.EXE"

これを自分の環境に合わせて書き換えます。

QMAIL3が無いとか言われる場合は記述を確認、もしくはパスに日本語が使われていないか確認してください。

実行

QMAIL3を実行します。(QMAIL3が実行中でないと自動巡回しないようにしています)

「AutoMail.mscr」を実行します。

特に問題無ければ、バッテリ駆動時30分間隔、外部電源時15分間隔の定期巡回が始まるはずです。
巡回開始直後にバッテリ駆動時2回、外部電源時3回LED、バイブレータが動作すると思います。
これが嫌だということで0にすると永久ループになりますので、注意してください。

自動巡回の中止

「AutoMailUnReg.mscr」を実行します。
特に問題無ければLED、バイブレータが5回動作すると思います。

注意

「AutoMail.mscr」は、自分自身を未来の日付で呼び出すことで間欠実行を実現しているので、自動実行継続中はファイル名の変更、ファイルの移動をしてはいけません。

「AutoMail.mscr」で自動実行を開始したら、「AutoMailUnReg.mscr」で停止させるまでいじらないようにしてください。

また、「AutoMailUnReg.mscr」が参照するためにファイル「\My Documents\AutoMailScriptName.txt」というファイルを作ります。これも「AutoMailUnReg.mscr」で自動実行を停止させるまで削除してはいけません。

基本的にはARM CPUを搭載したWIndows Mobile / Pocket PCで動くと思いますが、中には省電力機能の出来によって動かない、動くが不安定、という機種もあると思います。

おかしくなった場合

えーと、たまったイベントを消すユーティリティがあったと思うのですが……。

Task Manager v2.7でできました。Notificationsタブから削除などできます。
MortScripterおすすめのユーティリティです。

付記

カスタマイズ

「AutoMail.mscr」の冒頭に以下の項目があるので適当に書き換えてください。

# Configure ########

# QMAIL3で実行する巡回名
s_course = "YOUR_COURSE_NAME"

# QMAIL3のパス(フルパス指定)
s_qmail3 = \
"\Program Files\QMAIL3\Q3U.EXE"

# バッテリー駆動時のインターバル(分)
n_s_interval = 30

# 外部電源時のインターバル(分)
n_l_interval = 15

# 自動巡回実行
# バッテリーレベルしきい値(%)
n_batt_lv = 50

# サスペンドから起きてQMAIL3で
# 巡回するまでのウェイト(秒)
n_wait = 3

# wavファイルのパス
s_wav_file = \
"\Windows\KeyDown.wav"

省電力機能の設定

動作が不安定な場合は、「設定」の「バックライト」の「デバイスを使用していない時にはバックライトを切る」を30秒以上にしてください。

インプレッション

まだ全然実用してないので(してから書けよ)実用度は分かりませんが、夢の「サスペンドから起きての自動実行」なので、かなり感激してます。

別にQMAIL3に限った話でなく、いろんなことができると思います。例えばUK-TaniyamaさんのUKTenkiとか。
ダイヤルアップの接続・切断と、その同期方法を考えないといけないですが。

一応、MortScriptにはConnect()、Disconnect()、Connected()などの関数があります。(PDF)
同期方法が考えどころです。

| | Comments (0) | TrackBack (1)

2007.02.19

ruby-mswince再始動?

旧聞にて失礼します。

今さらRubyのWindows Mobile向けポートであるruby-mswinceが久しぶりにバージョンアップしていることに気が付きました。
はけさんも言及してますね。
現バージョンは1.8.5ベース。

以前試したときはrequireができなくて使うのをやめてしまいました。
乾電池駆動のMobile Gear IIでも起動したから、かなり色めき立ったのですけどね。
しかし、ちゃんと動くのであれば要注目の処理系。WM5機を持っていないので、試すことができていませんが。

WM5向けながら、一縷の望みをかけてSigmarion IIIとh2210で試してみましたが、残念ながらダメでした。

uema2.さんのサイトが残念な感じになっていたものの、はてなダイアリーに生存を確認
しかもruby-mswinceの.NET Compact Frameworkバインディングに挑戦中とのこと。
また新しくサイトを立ち上げるおつもりもあるようで、uema2.さんの動向には今後も要注目ですね。

| | Comments (0) | TrackBack (0)

2006.10.17

Sigmarion IIIやjornada720でもサンプリングシンセサイザー MilkyTrackerを試す

先日のエントリ「Linux ZaurusやPocket PC (Windows Mobile) でサンプリングシンセサイザー MilkyTrackerを試す」の続編となります。

前回のエントリではうまく動かせなかったH/PC(Handheld PC)でのMilkyTrackerの起動に再チャレンジ。

結論としては、動作しました。「GAPI for HPC's」が足りなかったから動かなかったのでした。

PalmOS系を除く多くのOSで動作する、素晴らしいDTMソフトウェアだと思います。

H/PCへのMilkyTrackerのインストール

MilkyTrackerのH/PC上での起動には、aygshell.dllとGAPI for HPC'sが必要です。

aygshell.dllのインストール

aygshell.dllを\Windowsにコピーします。
aygshell.dllは何種類かありますが、ホーミンさん版が今の定番でしょうか。

GAPI for HPC's(gx.dll)のインストール

続いて、「GAPI for HPC's」をWinCESoftからいただいてきてインストールします。
ちょうど昨日「GAPI for HPC’s v3.07 (2006.10.16)」がリリースされたところでしたね。

MilkyTrackerのインス