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文字。2008年7月8日のバージョンアップで255文字に増えたそうです。制限を超えて投稿したところ、末尾が切れるのみならず、化けたことがありました。
W-ZERO3シリーズの縦位置でQuicTodayのテキストフィールドいっぱいいっぱいに「あ」を入力すると、ちょうど21文字(デフォルトの文字サイズ時)。
テキストフィールドからはみ出ない短いメッセージしか送れないと考えた方がいいでしょう。

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

QuicTodayへの登録方法

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

使い方

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

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

インプレッション

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

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に関連付けました。

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

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

・一般公開。

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

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の場合は、標準出力の具合がよろしくないので、素直にファイルに書き出して読みましょう。

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点灯しました。

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の環境を劇的に改善するものとしてすごく欲しかったんですが、結局買わず仕舞い。

[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()

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が無いんですが、クリップボードへのアクセスも拡張できるんですかね。

blogparts

  • Last.fm
  • twitter

Recent Comments

無料ブログはココログ