コモンダイアログのテスト

とりあえず、仮アプリケーション名を「W-ZERO3 GPS」としてみた。
実際は、かなり精度の悪いGPSになりそうで、トラッキングツールとしてもまったく役に立たなさそうだが。
職場で「ちず丸 for Willcom」を使ってみたら、500mぐらい離れた位置になっていたし。
ちなみに、うちからだと250mぐらいずれている。
どういう計算をしているんだろうかなあ?
さて、今日は「コモンダイアログ」に関するテスト。
ログを保存する先を指定するところを先に作ってしまおうと。
ザウルスだと、その手のダイアログがなかったので、結局、手入力だったのだけれど、さすがWindowsというかMFCというか、コモンダイアログを呼ぶだけでファイルを書くところを指定できるようだ。開発者さん楽々。
しかし、やっぱりどうしたらいいのかわからないので、リファレンスとして、Windows CE Fanの開発者向け情報にあったサンプルコードを参考にしてみた。
http://www.wince.ne.jp/frame.asp?/review/kappy/tips4.htm
ここでは、「GetOpenFileName」という関数を使っていた。
これをそのまま使って作ってやると、エクスプローラのファイルダイアログが開いて、ファイルを選択できるようにはなるのだけれど、保存先を新しく作ることができない。
関数の名前からして、「GetSaveFileName」ってのもあるんじゃないの?と補完で検索してみたら、あっさりとあった。しかも、ほとんどそのまま使えた。
ただし、フィルタだけ修正する必要がある。
TCHAR型や、TEXTは不慣れなのだけれど、
filter[]=TEXT(“JPEG\0*.JPG\0\0”);
という表記からして、「\0」を区切り文字にして、前がダイアログボックスに現れる表記(「JPEGファイル」など)、後ろがワイルドカードの様子。GetSaveFileNameの場合は、後者の拡張子が反映される様子。
最後に、この得られた結果を表示するように、「Hello World」を表示している部分をそのままいただいて実装してみた。
GetSaveFileName
今日はもうひとつ、メニューボタンの非表示にも挑戦しようとした。
しかし、まったくわからない。
DISABLEとかENABLEとかを設定するところがどこかにあるとは思うのだが、あるのは、メニューのIDだけ。これだけでどうやって非表示とかにすればいいのやら?

W-ZERO3向けソフト開発開始

eMbedded Visual C++ 4.0 (以下、eVC++)をインストールして、W-ZERO3用のソフト開発に着手し始めた。
本職は、自称・ソフトウェアアーキテクトということにしているのだが、このごろはすっかりデバッガだったり、ポーターだったり、あんまり自分でコードを書くことはしていない今日この頃。
さらには、作るアプリケーションはGUIを使わないので、その手のプログラムもかなり久しぶり。
実は、数年前にVisual C++ 6.0で仕事をしたことがほんのちょっとだけあるのだが、すっかり忘れてるし。
本格的にGUIプログラミングをしたのって、「ざうちゃっ」が最後かしら?
前置きは長くなったけれど、まずは、MFCの作法とかを学んでいかないといかんなあ、と思うのだった。
まず、eVC++を起動して、最初にアプリケーションの雛形を選ぶ。
いくつか試したところでは、Pocket PC 2003用の「Hello World」アプリがよさそうだった。
これをビルドして、W-ZERO3で動かしてみたところ、「ソフトキー1」にきちんとメニューが割り当ててあった。
そう、Pocket PC用のソフトをインストールしても、多くはこのキーに対応していなかったりして、対応するのは難しいのだろうか?と思っていたのだ。探し方も見当もつかなかったし。
しかし、あっさりと、「Menubar」のリソースの中にあった。これはありがたい。
「IDM_MAIN_COMMAND1」 というのがそのキーイベントのIDで、左側の「ソフトキー1」に相当するらしい。
同じく、「IDM_MAIN_COMMAND2」というのが右側の「ソフトキー2」に相当する。
キーがわかれば、次は、そのキーイベント、ここではメニューバーなので、メニューイベントになるが、それを処理している部分を探して、お好みの処理を入れてあげればいい。
Pocket PCでは、右上の「×」ボタンを押しても、ウィンドウを閉じるだけでプロセスは動いたままになってしまって、終了させるのが面倒くさい。なので、メニューに「完全に終了する」という処理を入れたかった。
これは、「WndProc」というコールバック関数で処理されていた。
ちょうど、ヘルプダイアログを出すメニューイベントが記述されていたので、同じところにcase文を使って記述しておいた。
プログラムを終了する方法は実はよくわからないのだが、WM_DESTORYメッセージを自分のウィンドウハンドラに投げてやればいい、のかな?と思って、その処理を入れてみた。
SendMessage (hWnd, WM_DESTROY, 0, 0);
というのは、同じように、OKボタンが押されたときの処理で、WM_CLOSEメッセージを投げていたからだ。
で、実際、WM_DESTROYメッセージを投げたら、アプリケーションは完全に終了してくれた。
ま、これでいいか。
あとは、おまけで、W-ZERO3の高解像度(Hi Resolution)対応するためのリソースも追加した。
これは、Pocket Streets 2002のVGA化でも使ったのと同じ手法で、「CEUX」というリソースを追加して、そこに適切な値を設定してやると、アプリケーションがVGA対応であると認識するのだそうだ。
その方法については、「Windows Mobile 2003 Second Edition Developer Resources」に含まれるドキュメント「DPI_Awareness.doc」に書いてあった。
とりあえず、何もできないけれど、「Hello World」が表示されるだけのアプリが完成。
HELLOAPP
さて、次は、「Hello World」を書き換えるところかなあ。
追伸: せっかくなので、W-ZERO3のカテゴリを作ってみた。

VMware Player と MOOCS

PC環境整備のため、これまで3つもOSが入っていたのを、Windows XP Media Center Edition 2005 1本に絞ることに。Windows 2000はVMware Playerで動かすし、今後、Linuxなども開発環境用にしか使わないから、結局、VMでよかろう、という判断に。
さて、PCがふっとぶと使えなくなるのが気に入らない「MOOCS」を蒸し返してみると、2/1にまた新しい無料楽曲が増えていた。
VMで構築したWindows 2000にインストールしたMOOCS Playerで楽曲をダウンロードしておいて、その状態で、ホストOSを再インストールして、そこにまたVMware Playerをインストールして、VMをコピーして、起動して…ああ、ややこしい。
ともかく、再インストールしなおしたホストの上に、VMを構築しなおしたとき、MOOCSのライセンスはどうなるのか?というのをちょっと試してみたかった。
結果、問題なく再生ができた。うーん、何の固有値を見て同一PCとか判定しているのか?インストールする際に作ったランダムな値とか?
とりあえず、これで「システムごとバックアップを取ってしまえばオッケー」という方向が見えた。
一方、VMware上のMOOCSからCDを作成しようとしたら、失敗した。
VMwareはCD-Rのライティングには対応していないんだっけ?
でも、CD-RWの消去はちゃんとできたぞ??
ちなみに、CDを作成しようとしているのは、iTunesで再リッピングするため。
どうせ、無料入手の音源なので、音質が下がろうが気にしないのであった。

と、ここまでして思ったのだが、「ライセンスバックアップができない」という購入意欲をいきなりそいでくれるサービスから、楽曲を購入することはありえないから、無料曲しかダウンロードしないじゃん、と。
しかも、その無料曲もiTunesに取り込みなおすんだから、ライセンスの保存とか考えなくていいんじゃないの?と。
でもまあ、技術的興味とか挑戦ということであります。

VMware Player で Windows 2000 を動かす

無料ソフトウェア「VMware Player」では、Virtual Machine (VM) を作成することができないのだけれど、設定ファイルとディスクファイルを用意してあげれば、動かすことができる。
on CDで動くOS(Knoopixなど)なら、設定ファイルとCDイメージだけでも動いてしまうけど。
手持ちのVMware Workstation 3.2がAthlon 64には非対応っぽいので、VMware Playerで動かしてやることにした。
なお、3.2で作ったVMファイルは使えないし、アップグレードパスもない。もっとも、VMでは重要な作業はしてなかったからいらないけど。
さて、いろんなサイトを見て回って、実際に動くようにしたところまでを書き残しておく。
1. 「VMware Player」を入手する。
VMwareのサイトで簡単に手に入る。
2. 「QEMU on Windows」を入手する。
これもQEMUをGoogleで探せばすぐに手に入った。
3. ディスクファイルを作成する。
QEMUのツールのひとつ「qemu-img」を使って、VMware形式(VMDK)のものを作成する。
ここで作るディスクイメージは仮想ディスクの最大容量を指定するのだけれど、FAT32の外付けHDDにバックアップすることも考えて、4GBまでにしておく。
qemu-img create -f vmdk image.vmdk 4G
「4G」は「4GB」の意味。「4096M」でもたぶん一緒。
4. 設定ファイルを作成する。
設定ファイル(VMXファイル)は、実はテキストファイル。メモ帳があれば作成できてしまう。
インターネットで見つけた設定ファイルをもとに、修正などを加えたのが以下のとおり。

config.version = “8”
virtualHW.version = “4”
memsize = “256”
displayName = “Windows 2000 Professional”
guestOS = “win2000pro”
nvram = “win2k.nvram”
checkpoint.vmState = “”
scsi0:0.present = “FALSE”
scsi0:0.redo = “”
ide0:0.present = “TRUE”
ide0:0.fileName = “image.vmdk”
ide0:0.redo = “”
ide1:0.present = “TRUE”
ide1:0.autodetect = “TRUE”
# for Physical Drive
#ide1:0.fileName = “auto detect”
#ide1:0.deviceType = “cdrom-raw”
# for Virtual Drive
#ide1:0.fileName = “I:”
#ide1:0.deviceType = “cdrom-raw”
# for Install CD image
ide1:0.fileName = “w2k-install.iso”
ide1:0.deviceType = “cdrom-image”
# for VMware Tools
#ide1:0.fileName = “windows.iso”
#ide1:0.deviceType = “cdrom-image”
floppy0.present = “FALSE”
ethernet0.present = “TRUE”
ethernet0.connectionType = “nat”
ethernet0.addressType = “generated”
ethernet0.generatedAddress = “00:0c:29:d7:59:00”
ethernet0.generatedAddressOffset = “0”
sound.present = “TRUE”
sound.virtualDev = “es1371”
#usb.present = “TRUE”
usb.present = “FALSE”
uuid.location = “56 4d c3 26 2d 94 b4 23-78 41 62 fa b4 d7 59 00”
uuid.bios = “56 4d c3 26 2d 94 b4 23-78 41 62 fa b4 d7 59 00”
usb.autoConnect.device0 = “”
usb.autoConnect.device1 = “”

#で始まる行はコメント。
「(device).present」 はそのデバイスが使えるようにしてあるかどうか、ということらしい。
この設定では、USBは使わないようにしている。
CD-ROMの設定は、まずはWindows 2000のインストールなので、インストールCDのイメージを作っておいて、設定ファイルと同じディレクトリにおいておいた。
filenameにドライブパスを入れておくと、特定のドライブをマウントすることができるようになる。
なお、VMware Workstationだと、動作中にもCD-ROMの対象となるイメージを入れ替えることができたのだけれど、どうもできない様子。VMware Playerはできない様子。
なので、インストールには不便。
「DAEMON Tools」と組み合わせると、ISOイメージを簡単に交換できるので、便利。
5. 起動〜インストール
ここまできたら、VMware Playerを起動する。
作成したVMXファイルをダブルクリックすれば勝手に起動してくれる。
初回なので、HDDがフォーマットされていなければ、CD-ROMにブートが行ってくれるはず。
BIOSをいじりたいときには、F2キーを連打するのだけれど、カーソルがちゃんとVMware Playerに取り込まれていないと、キーを受け付けてくれない。
起動して直後は、フォーカスが中にいっていないので、すぐにウィンドウ内をクリックして、F2を押すという、結構タイミングがシビアなことをやらなくちゃならなかった。なかなか慣れないもの。
ともかく、CD-ROMブートができれば、あとは普通のインストールと変わらず。
まあ、ちょっと遅いけど。
6. VMware Toolsのインストール
VMware Workstationには、VMware用Windows SVGAドライバやマウスドライバが付属している。
これをインストールしないと、画面は16色しか出ない。
VMware Workstationのうち、Linux用TAR BALL(*.tar.gzファイル)を入手するのが吉。
これなら、インストールすることなく、中から「windows.iso」という、ドライバインストールディスクのイメージを取り出すことができる。
このイメージを取得したら、CDに焼くか、DAEMON Toolsを使ってマウントさせるか、VMXファイルのISOイメージを書き換えるかして、VM上のWindows 2000にインストールする。
なお、VMXの書き換えが有効になるのは、VMがシャットダウンしている時〜起動時なので、起動中に一時停止をかけて、VMXを書き換えて、再起動、というのでは反映されない。
7. 運用
VMware Toolsがインストールされたら、基本は完成。
あとは、Microsoft Updateをかけたり、いろいろと作業をして、普通に使えばいい。

W-ZERO3に入れたアプリ

とりあえず、現時点でW-ZERO3に入っているソフト。
EBPocket
プロアトラスLite PDA
無線LAN接続切り替えツール
Opera Browser
TCPMP
GSFinder
TRE
WZERO3MON
GSPocketMagic++
Pocket Streets 2002
Skype
ちず丸 for Willcom
乗換案内
ぷよぷよフィーバー
定番ソフトやらなにやらいろいろと。
一度、フルリセットしちゃおうかな?
その前に、メールのバックアップを取りたいな。

W-ZERO3 GPSツール案

正直なところ、W-ZERO3やW-SIMの位置情報ではトラッキングには不向きだと思うけど、遊び半分で。
仮想COM化はあとにして、まずは、緯度経度をログに取っていくツールを作ってみることを考える。
すでにログを取るツールとしては、「W-ZERO3 Monitor」 というのがあるのだけれど、電波状況が欲しい訳じゃないので、もっと単純化しようと。
1.COMポートを開く
2.ATコマンドを送る
3.COMポートを閉じる
4.時間、緯度、経度をログに書く
これを周期的に行うようにする。たとえば、1分毎とかね。
繋ぎっぱなしにしていると、受話とかメール受信ができなくなっちゃうからね。
あとは出力。
ATコマンドの応答が、TOKYO97測地系で、
Nxx.xxxxxx
Eyyy.yyyyyy
となるのはわかっているので、これをどうフォーマットするか。
とりあえず、持っている情報だけ出しておいて、再フォーマットはPerlなりでも処理しやすい形にしておくとしたら、
N,xx.xxxxxx,E,yyy.yyyyyy,YY,MM,DD,HH,mm,ss
で、いいか。
まずは、開発環境を整備して、ATコマンドを出力して結果を得るところまで作ろう。
○W-ZERO3 Monitor
http://www31.ocn.ne.jp/〜yoshio2/wzero3mon-1.html

W-ZERO3 と Pocket Streets 2002

地図ソフト大好き人間なので、W-ZERO3には「プロアトラスLite for PDA」と「ちず丸 for Willcom」が入っている。
米Microsoft社が販売する米国の地図ソフト「Streets & Trips」には、Pocket PC用のソフトウェア「Pocket Streets」が付属していて、Windows版のソフトウェアから地図を切り出して持ち出すことができる。まあ、その辺は、「プロアトラスLite for PDA」に似ているんだけど、データがベクトルデータなので、拡大縮小が自由自在。Point of Interestの表示、住所検索なんかもできてしまう。さらに、GPSにも対応、と、いたれりつくせりなのであった。
手元には、昔、アメリカにいた頃に買って、初代iPaqに入れていたことがある「Pocket Streets 2002」がある。2003も買ったのだが、日本に帰ってきたときに、アメリカに行く人に気前よくあげてしまった。
ともあれ、W-ZERO3でもこの2001年頃のソフトが動くのか、試してみた。
さらに、VGA化もしてみた。
pstreet
サンプルのSeattle, WAの地図より、Space Needle周辺。
おお、かなりいい感じじゃん?
「Streets & Trips 2006」もちょっと欲しくなった。$40ぐらいで買えるかあ。うーん。
Costcoで買うのが一番安いのよね。
もっとも、W-ZERO3をアメリカで使う機会なんてあるの?と思うわけだが、まあ、友人たちに見せびらかすことがあるか?というぐらいだろうか。でも、アメリカじゃWindows Mobile Phoneは少なくないからなあ。でも、この形はちょっとかっこいいかもな。そもそも、W-ZERO3を使ってる間にアメリカに行く機会あるんかいな?
W-ZERO3はGPS機能が使えないので、結局、Meridian GPSを使った方がいいんだろうな。あちらも住所検索ができるし。モノクロだけど。
そういや、マゼランに渡したままのGPSがまだ帰ってこないなあ。
忘れられてるのか?

エクスポゼがWindowsに!

Mac OS X 10.3 Pantherの発売日以降、この機能がないためにWindowsにはもう戻れない!と思った機能:『Expose´』(エクスポゼ)
それが、Windowsでも実現されたというのだ!
http://hotwired.goo.ne.jp/news/technology/story/20060203302.html
オタクソフトウェアとゆう会社が作ったらしく、30日のトライアル版があるとゆうので、早速、試してみた。
本当に、Expose´のような動きをする!
でも、Athlon 64 3000+ と ATI Radeon 9550 の組み合わせのせいか、動きはもさっとしている。
ちょうど、PowerBook G4 Titanium (G4 500Mhz + Rage Mobility)にPantherを導入して、動作させたような、そんな動き。
iBook 32VRAM(G3 800Mhz + Radeon 7500)に比べても、圧倒的に遅い。
それでも、なんか、幸せを感じた。
価格は$9.95。Windowsを常用するなら、出す価値はあるんだが、会社のPCには(個人でライセンスを所有するソフトは)入れられないしなあ。

W-ZERO3 GPS化計画へまた一歩

W-ZERO3で位置情報 http://app.blog.livedoor.jp/hayasuda/tb.cgi/50305369
というのを発見。
「ちず丸 for Willcom」をバイナリエディタで見れば良かったのね。
ATコマンドはテキストだから、普通にソフトを作ったら、テキストリソースに残るものね。
AT@LBC1
AT@LBC?
AT@LBC2
が一連のコマンドのようで、最初と最後が切り替えかな。
プロアトラスLite PDAがGPS対応しているので、なんとか、仮想COMポート(COM4とか)を作成して、そこにつなぐと、このATコマンドを使って緯度経度を取得して、NMEAでデータをはき出す、とゆうようなことができれば、ちょっとかっこいいんだけどな。
インフルエンザで仕事を休んでいるのに、なにをやってんだか(苦笑)
追記:
ちなみに、このデータ、測位系はTOKYO97ですね。変換が必要か。