道楽とは

英会話教室で、プレゼンテーションの練習があるので、その調べ物をしていたところ、感動的なフレーズに出くわした。
When a habit begins to cost money it is called a hobby.
ハビット(くせ)にマニー(金)がかかるようになると、それはハビー(道楽)と呼ばれる。
ちなみに、調べていたのは、村井弦斎の「食道楽」のタイトルをどう英語訳するか。
結局、「foodie」(食通、グルメ)としてみた。
ちなみに、その「食道楽」で紹介されたレシピを使ったカレーパンとコロッケが、明治村で売っているらしい。
http://www.meijimura.com/105/02.html
明治村、行きたいなあ。

Hi-MD WALKMAN MZ-NH3D

Hi-MD WALKMAN MZ-NH3Dが近所のサトー無線の閉店にあわせて、展示品が処分価格になっていたので購入。
WALKMANと名の付くものを購入するのは初めてかもしれない。そりゃそうだ。音楽聴かなかったもん。
HiMD
iPodももっているのに、いまさらMDかよ?
というのもあるのだが、愛車のカーナビになぜかMDが搭載されているので、これを使ってやりたいな、と思っていたわけだ。車を買って2年になるけど、一度も使ったことがなかった。
CDプレーヤも当然内蔵しているから、CD-R焼けばいいじゃん、という話しもあるんだが、CD-Rは長くても80分しか入らない。MP3対応じゃないからねえ。
もちろん、iPodを接続することも試した。こいつなら、毎日Podcastも入ってくるし。
FMトランスミッタも買ったし、ドックコネクタから接続するオーディオケーブルも買ったし、ビデオも表示できる3端子つきのビデオケーブルだってもってる。でも、どれもいいソリューションではなかった。なにより、接続するの面倒なのよ。
MDなら、MDLPに対応しているので、1枚で最大320分まで行ける。
今回購入したHi-MDプレーヤは、PCと接続することで、CDから取り込んでMDに書き出すことができる。NetMDと同じだけど、これは便利。なにせ、CDプレーヤとMDレコーダを繋いでダビングとか面倒なことをしなくて済む。
CDをSonicStageというソフトで取り込んで、それをUSB接続したMDプレーヤに書き込むだけ。実に簡単。
初期設定のままにしておくと、CDはATRAC3 64kbps、すなわちMDLP LP4相当で取り込みされるので、そのままMDに転送すれば、勝手に収録時間が4倍になる。どうも、LP2やSPとの混在もできそうだが?
さらに、Hi-MDプレーヤは、データストレージ機能ももっている。
マスストレージクラスに対応しているので、繋げばそのままMOみたいな感じで使うことができる。
いままでのMDでも、2倍容量になってくれるので、300MBぐらいのデータストレージになってくれる。
フォーマットさえ済んでいれば、Mac OS Xでも認識してくれるので、これはいいかも。
液晶付きリモコンもついているので、いっそ、iPodから乗り換えてもいいかも、とちょっと思わせる。
とゆっても、実際はPodcastを取り込むのも面倒だから、乗り換えることはないだろう。
基本的に、カーオーディオ用音楽作成デバイス、という位置づけ。
MDLP LP4の音質は、相当ひどいものなんじゃないかと危惧していたけれど、全く問題にならなかった。
むしろ、iPodをケーブルで接続して、VCR入力から出力した方が汚いぐらい。
これなら十分にカーオーディオとして使えそうだ、という印象を持った。
ただ、このプレーヤ、難点もある。
クレードルはオシャレなデザインなのだが、充電しかできない。あくまで、「充電スタンド」。
最初は本体のどこにACアダプタのコネクタがあるのか探してしまった。
実は、充電スタンドがないと充電できないのだ。18時間程度しか再生時間がないのに、
ちょっとした旅行には充電スタンドも持っていかないとならなさそう。
それは、iPodでも同じ問題があるけど、iPodはUSBやFirewireからの充電もできるからなあ。
また、PC接続と充電を同時にできない。同じコネクタを使っているから。
そのため、充電スタンドから取り出して、ケーブルをさしなおさないといけない。
これは面倒だ。
普段はUSBに繋いだままにしたいんだけどな。

グループボックスは使えない?

ダイアログボックスにラジオボタンを作っているところ。
緯度経度の出力を、TOKYO97かWGS84にするか、という選択肢をつけようとした。
まあ、最初はTOKYO97だけの実装になると思うけど。
「Beginning Visual C++ 6」によると、ラジオボタンを含むときには、「グループボックス」というコントロールを使う、というようなことが書いてあった。
そして、eVCにもグループボックスがある。
ラジオボタンをグループボックスで囲んでダイアログを作って、ビルドして、実機で実行したところ、正しく表示されない。消えてしまうのだ。
これは、おそらく、1つのダイアログではラジオボタンは1組しか使えない、ということなのかな、とも思った。
まあ、いいか。
ラジオ化するのはそのぐらいだし、ほかのコントロールでも代用できるし。

eVC開発環境再構築

eMbedded Visual C++をPAEが動作する環境で動かそうとすると、Pocket PCエミュレータが危険なアプリケーションです、とかなんとかいわれてしまうので、それを避けたくてVMware PlayerでWindows 2000環境を構築していた。
そこにeVCをインストールして開発をスタートしていたのだが、ビルドしたプログラムを転送するのが面倒くさい。
ビルド時間とかは気にならないぐらい応答もいいのだけれど、ともかく、この転送のためにいちいちゲストからホスト、ホストからゲストへ、と移るのがわずらわしい。
ということで、ホストOS側にeVCをインストールすることにした。
このためには、セキュリティリスクがともなう。
せっかく、Athlon 64 + Windows XP Media Center Editon 2005 (XP Pro SP2相当)によって使えるようになった、NX機能をつぶさなくてはならないのだ。
この方法がよくわからなかった。
まずはじめに「boot.iniの/PAEオプションを消しなさい」という英語のヘルプページに飛ばされた。
しかし、そんなものはない。
SP2の方はこちら、というページ(http://support.microsoft.com/kb/891667/)に飛ぶと、日本語表示になった。
たぶん、言語設定が日本語だからだろう。
しかし、意味がわからない。

5. pae を存在する場合、がオプションするを削除することによって PAE モードを無効にします。
6. noexecute を存在する場合、
がオプションするを削除します。

なんですかこれは?
と思ったら、これ、機械翻訳サービスによるページだったらしい。
トップに注意書きがあったので、引用すると、

ご注意: このサポート技術情報 (以下 KB) は、通常、英語で提供されている文書が機械翻訳システムにより自動翻訳されたものであり、人的な確認・修正が加えられたものではありません。この翻訳版の KBは、日本語をお使いになるお客様の便宜のために提供させて頂くものであり、マイクロソフトは、翻訳言語の品質について一切保証するものではありません。また、KB の内容誤訳によって、またはお客様による KB のご使用によって、直接または間接的に起こりうる一切の問題について、いかなる責任も負わないものとします。

内容を誤訳したら、意味が変わる可能性が十分にあるんだけどなあ。
ともあれ、翻訳を英語にしたら、普通の英語になってくれた。やれやれ。
結局、

5. /pae が存在する場合、オプションを削除することによって PAE モードを無効にします。
6. /noexecute が存在する場合、オプションを削除します。

ということだったらしい。
これによって、NX機能が使えなくなった。ああ、セキュリティリスクが…
まあ、まだ多くのPCはNX機能をつんでないんだし、と思いつつも、Athlon 64使ってる意味がないじゃん、とだんだん思うようになってきた。
特徴機能の中で実際に使われているのは、Cool’n Quietだけか…

VMware Player と Athlon 64 3000+ と 64bit OS

VMware Playerは64bitホストならびにゲストOSに対応しているのだけれど、もちろん、CPUも64bit対応している必要がある。
我が家のPCは、Athlon 64 3000+なので、ホストはWindows XP Media Center Edition 2005ということで、32bit OSなのだけれど、その上で仮想マシンとして64bit OSが動かせるじゃん!と期待していたのだけれど…
対応CPUは、
・AMD Athlon 64, revision D or later
とのことで、うちのSocket 754のAthlon 64は、Family F, Model Cだったとさ。ああん。
ということで、相変わらず、64bit拡張CPUの恩恵は受けられずじまいなのであった。
むしろ、PAEのせいで動かないアプリがあって邪魔くさいぐらい…

ダイアログボックスのメニューを消す

今日は設定用のダイアログボックスを作ってみよう、と思った。
「Beginning Visual C++ 6」という英語の分厚い本を引っ張り出してきて、ダイアログボックスのあたりとかを読んでいるのだけれど、同じようにしてもリンクが通らない。VC6とeVCとでは、扱いが違うのか?
それとは別に、「このソフトウェアについて」のダイアログが出ているときに、ソフトキーが表示されているのがいやだなあ、と思った。
これを消すために、何かInactiveとかEnableとかHideとか何かのコントロールを使わなくてはならないのだろう、と思っていたのだけれど、どうもそうではなく、消すだけなら簡単らしい。
WM_INITDIALOG メッセージの処理時に、SHINITDLGINFO のフラグとして、

SHINITDLGINFO shidi;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU;

とする。SHIDIF_EMPTYMENUが追加の部分。
これで、ソフトキーが消えてくれる。
AboutDialog
うんうん、こうでなくてはな。

開発お休みの日

三日坊主、ともいえなくもないが。
今日は、W-ZERO3の開発はお休み。
帰ってきたら9時半ぐらいだったし。
本職の方で、一日中、コード眺めたりビルドしたりデバッグしたりをしていたから、コードものは疲れ気味。
また週末にちょこっと手を出そう。

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

とりあえず、仮アプリケーション名を「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に取り込みなおすんだから、ライセンスの保存とか考えなくていいんじゃないの?と。
でもまあ、技術的興味とか挑戦ということであります。