月別アーカイブ: 2009年7月

WindowsMobile CABファイルの作成

WindowsMobile 用のフリーソフトウエアは CAB 形式で配布しています。
CAB ファイルは explorer から実行するだけでインストールできるので扱いも簡単です。

今なら別の方法があるのかもしれませんが、昔から VisualStudio に付属している
cabwiz を使用しています。というか WindowsCE / PocketPC の頃に作った設定
ファイルをほとんどテンプレートとして、ずっとそのまま使ってきました。

d3dmclock の場合 (d3dmclock.inf)

[Version]
Signature	= "$Windows NT$"
Provider	= "HYP"
CESignature	= "$Windows CE$"

[CEStrings]
AppName		= d3dmclock
InstallDir	= %CE1%\%AppName%

[CEDevice.ARMWM6]
VersionMin	= 5.0
VersionMax	= 32767.0
ProcessorType	= 2577

[DestinationDirs]
Shortcuts.All = 0,%CE11%
Files.Common = 0,%InstallDir%
DefaultDestDir = 0,%InstallDir%

[Shortcuts.All]
d3dmclock,0,d3dmclock.exe,%CE11%

[SourceDisksNames]
1 = , "Common files",,C:\usr\ce\gclock

[SourceDisksNames.ARMWM6]
2 = , "ARMfiles",,C:\usr\ce\gclock\ARMV4I\Release

[SourceDisksFiles]
d3dmclock.txt = 1
font.dds = 1
bgimage0.bmp = 1
bgimage1.bmp = 1
bgimage2.bmp = 1
textimage0.dds = 1
textimage1.dds = 1
textimage2.dds = 1
textimage3.dds = 1
textimage4.dds = 1
textimage5.dds = 1
textimage6.dds = 1
textimage7.dds = 1

[SourceDisksFiles.ARMWM6]
d3dmclock.exe = 2

[DefaultInstall]
CEShortcuts	= Shortcuts.All

[DefaultInstall.ARMWM6]
CopyFiles	= Files.Common, Files.ARMWM6

[Files.Common]
d3dmclock.txt,,,0
font.dds,,,0
bgimage0.bmp,,,0
bgimage1.bmp,,,0
bgimage2.bmp,,,0
textimage0.dds,,,0
textimage1.dds,,,0
textimage2.dds,,,0
textimage3.dds,,,0
textimage4.dds,,,0
textimage5.dds,,,0
textimage6.dds,,,0
textimage7.dds,,,0

[Files.ARMWM6]
d3dmclock.exe,,,0x80000000

CEString は他で参照する定数の定義です。%~% で参照しています。
Install 先フォルダをここに記述しています。%CE1% は \Program Files

SourceDisksNames はインストールするファイルが置かれている実在のパスを指定します。

SourceDisksFiles はアーカイブするファイルがどこにあるか指定します。
後ろの番号は SourceDisksNames の番号に対応しています。

Files が実際にインストールコピーされるファイルリスト。

“.ARMWM6” がついた定義名は、もともと WindowsCE が複数の CPU に対応しており
対象 CPU 毎に CAB を用意していた頃の名残です。CPU 毎に別ファイルを指定する
場合と、共通に含めるファイルを分けて記述できるようになっています。

(1) DestinationDirs でインストール先フォルダを指定。
  %InstallDir% の定義は CEStrings にあります。
(2) SourceDisksNames.* にアーカイブするファイルの場所を記述
(3) SourceDisksFiles.* に必要なファイルを記述
  (数値は SourceDisksNames の番号に対応している)
(4) Files.* にアーカイブするファイルを記述

詳しくはこちら
MSDN スマート デバイスの .inf ファイルの概要

touchkeysip の場合 (touchkeysip.inf)

[Version]
Signature	= "$Windows NT$"
Provider	= "HYP"
CESignature	= "$Windows CE$"

[CEStrings]
AppName		= touchkeysip
InstallDir	= %CE1%\%AppName%

[CEDevice.ARM]
VersionMin	= 5.0
VersionMax	= 1000.0
ProcessorType	= 2577

[CEDevice.ARMGS]
VersionMin	= 5.0
VersionMax	= 1000.0
ProcessorType	= 2577

[DestinationDirs]
Files.Common = 0,%InstallDir%
DefaultDestDir = 0,%CE2%

[SourceDisksNames]
1 = , "Common files",,C:\usr\ce\minisip2

[SourceDisksNames.ARM]
2 = , "ARMfiles",,C:\usr\ce\minisip2

[SourceDisksNames.ARMGS]
3 = , "ARMfiles",,C:\usr\ce\minisip2\gs

[SourceDisksFiles]
touchkeysip.txt = 1
defaultscript.txt = 1
defaultkeyboard.bmp = 1

[SourceDisksFiles.ARM]
touchkeysip.dll = 2

[SourceDisksFiles.ARMGS]
touchkeysip.dll = 3

[DefaultInstall]

[DefaultInstall.ARM]
CopyFiles	= Files.Common, Files.ARM
CESelfRegister	= touchkeysip.dll

[DefaultInstall.ARMGS]
CopyFiles	= Files.Common, Files.ARMGS
CESelfRegister	= touchkeysip.dll

[Files.Common]
touchkeysip.txt,,,0
defaultscript.txt,,,0
defaultkeyboard.bmp,,,0

[Files.ARM]
touchkeysip.dll,,,0x80000000

[Files.ARMGS]
touchkeysip.dll,,,0x80000000

コマンドの実行手順は Makefile に記述しています。(install.mak)

ZIPFILEARM	= touchkeysip***.zip
CABFILEARM	= touchkeysip.ARM.CAB
EXEARM		= touchkeysip.dll

all: \
	$(EXEARM) \
	$(CABFILEARM) \
	$(ZIPFILEARM) \


zip: $(ZIPFILEARM)


_MANUALFILE	= touchkeysip.txt	\
		CommandManual.txt	\


_CABSRCFILE	= touchkeysip.txt	\
		defaultscript.txt	\
		defaultkeyboard.bmp	\


_SRCFILEARM	= $(EXEARM) \
		$(_CABSRCFILE) \


ZIPSRCFILEARM	= $(CABFILEARM)   $(_MANUALFILE)


$(ZIPFILEARM):	$(ZIPSRCFILEARM)
	7z a -tzip $(ZIPFILEARM) $(ZIPSRCFILEARM)


CABWIZE	= C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\Cabwiz.exe

$(CABFILEARM): touchkeysip.inf $(_SRCFILEARM)
	"$(CABWIZE)" touchkeysip.inf  /cpu ARM

VisualStudio で作成&動作確認が終わったら、nmake の実行だけで CAB の生成と
zip の作成もいっぺんに行われます。上のファイルは install.mak という名前で
各プロジェクトのフォルダに置いてあります。実行はコマンドラインから

nmake -f install.mak

プログラムの数も非常に多いし、開発中はそれぞれが頻繁に更新されるので
公開までの手順は自動化されています。
ドキュメントを修正した場合も nmake だけでアーカイブが作られます。

普段使っているスクリプトファイルを入れて

touchkeysip.dll + スクリプト

といった自分専用の CAB を作っておけば、デバイスの再インストール時に
ちょっとだけ手間が減るかもしれません。

作業向けの高性能マウスが欲しい

キーボードに結構こだわっている人はいます。
プログラマだと少々高くても良いものを探したり、好みのものを選んで使ってる
方も多いことと思います。
全く同じように、緻密ながら素早い動作が必要になるデザイナーの作業でも
マウスの性能差は作業効率に大きく影響があるのだそうでです。

知り合いのデザイナーにきいたところ、仕事がらマウス選びにはいつも
苦労しているのだそうです。

マウスの場合、性能の良い高級タイプはゲーマー向けとして売られているものが
ほとんどです。
センサーの性能や確実性、反応速度などはやはりこれらゲーマー向けマウスが
一番だとのこと。

ただどうしてもサイズが大きいものが多くて、手になじまないのが悩みだと
訴えていました。
ゲームプレイ時と作業時では、実際にマウスを動かす稼働範囲やマウス自体の
持ち方が違っているのかもしれません。
例えば手首を固定して指先でマウスを持つような持ち方の場合、
マウスが大きすぎると手のひらが密着してあまり動かせられなくなります。

持ち方だけでなく、純粋に手の大きさが違う場合もあります。
マウスのサイズにはもっとバリエーションが多くても良いのではないでしょうか。

日本のブランドである DHARMAPOINT のゲーマーマウスは、比較的小振りで
よく使っているそうです。

なんだかんだでいろいろ試しているうちに、DHARAMAPOINT ブランドの製品は
マウス全世代、マウスパッド数タイプ、交換ソール、キーボードなど
ヘッドセット以外は全部買いそろえてしまったらしい。

DHARMAPOINT

ゲーマーマウス並の高性能で、さらに作業用で持ち方にあわせて
大きさを各種選べるような、そんなマウスは無いでしょうか。
毎日ほとんどの時間をマウスとともに費やしているわけです。
ストレスを抱えながら作業するよりは少々高くても良いマウスを選びます。

Media Go で PSP のデータ管理

PC 上で PSP のデータを管理できる Media Go というソフトウエアが少し前に
リリースされていたようです。PlayStation Store に接続することも可能で、
PSP のネット環境がなくてもソフトウエアのダウンロードや購入ができます。

SONY Media Go

以前から PC 上で PSP ソフトウエアの購入はできましたが、当初はもっとシンプルな
ダウンロード専用ツールだったように覚えています。
Media Go ではさらにゲームの入れ替えやセーブデータのバックアップも可能。
PSP に転送するメディアファイルの管理もできて、統合ツールに進化しつつ
あるようです。

Media Go は PSP をつながなくてもインストール&起動することができました。
左側の「PlayStation Store」をクリックすると PSP 版のストアにアクセスできます。
ゲームタイトルやビデオの一覧はログインしなくても閲覧可能。
実際にダウンロードする場合にはアカウント情報が必要になります。

PC と PSP の接続は USB ケーブルで行います。
PSP を「USB 接続」モードにすれば空き容量やファームのバージョンなど本体の
情報が表示され、同時にメモリースティック内のデータもブラウズできます。

アイコン付きで、現在どんなゲームが入っているのか一目瞭然です。
セーブデータもわかりやすく、タイトルごとにまとまっているので扱いも容易です。

これまでもメモリースティックを直接参照すれば同じような管理はできました。
でもフォルダ名がタイトル固有 ID なので、どのファイルがどのゲームなのか
判断するのは困難だったのです。

Media Go 上では、ゲームやセーブデータのアイコン上でマウスの右ボタンを押して
「転送→ライブラリ」を選ぶと PC のライブラリに保存できます。
PSP に書き戻せるので、容量の限られたメモリースティックでも複数のゲームを
入れ替えながら使えるようです。

ライブラリの保存先はマイドキュメントの “Media Go” でした。
中をのぞいてみると、ライセンスファイルは特に指定しなくても自動で
バックアップされていることがわかります。

操作はシンプルでそれほど多機能ではありませんが、位置づけやできることは
iTunes に近いようです。時間のかかる転送もバックグラウンドで行われるので
やはり意識しているように見えます。
Sony 製のメディア管理ソフトというと、どうしても過去の重いソフトウエアたちを
思い浮かべてしまいます。Media Go は比較的動作も軽い印象でした。

ストアへの初回接続時に、言語を選択する画面が現れます。
ここで間違ったリンクをクリックしてしまうと海外のストアにつながりますが、
言語を選択し直す方法がわからなくて焦りました。
ユーザー設定から変更できるのは、メニューなど UI の言語だけでした。

レジストリの下記エントリを消して起動し直すと、再びストアの言語選択に戻れる
ことがわかりました。または Region の値を “JP” にすれば良いようです。
(レジストリを書き換える場合は自己責任でお願いします)

HKEY_CURRENT_USER\Software\Sony Corporation\PS Store\Region

すでに PS3 上で PSP のゲームのダウンロード&管理を行っているため特に移行
する必要はないのですが、データをまとめて転送できる Media Go は便利そうです。

関連エントリ
新型 PSP (PSP-2000) とゲームアーカイブス

Direct3D11/DirectX11 GeForce の ComputeShader とドライバ

少し前から Compute Shader が使えなくなっていました。

Direct3D11/DirectX11 ComputeShader 4.0 を使う

上のエントリを書いたあと、ドライバを 186.18 に更新したら
CheckFeatureSupport() の D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS で
ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x が 0 を返す
ようになっており、実際に CreateComputeShader() が失敗します。
今回 190.38 に更新してもやっぱり同じで、186.08 に戻したら動きました。

なお CheckFeatureSupport() の D3D11_FEATURE_THREADING で
DriverConcurrentCreates は 1 を返すので、ドライバがきちんと D3D11 に
対応しているのは本当です。
DriverCommandLists が 0 なので Deferred Context はドライバの
エミュレーションになりますが、リソース生成はスレッドに対応している
ことになります。

DriverConcurrentCreates
 リソース生成のスレッド対応かどうか。

DriverCommandLists
 ドライバが CommandList の記録と実行に直接対応しているかどうか。
 0 でもコマンドバッファをソフトウエアで記録するため実行できます。

以前描画周りを Direct3D11 対応で作り直していて積極的にスレッド化したの
ですが、ロード後のリソース生成でまれに失敗することがありました。
よく考えたら当時まだドライバが DriverConcurrentCreates に
対応していなかったので当たり前でした。

関連エントリ
Direct3D11/DirectX11 ComputeShader 4.0 を使う
Direct3D11/DirectX11 (6) D3D11 の ComputeShader を使ってみる

メビウス PC-NJ70A (8) タッチアプリとイルミスキャン

モニターレポートで少々当てが外れたのは、2回目くらいまでには SDK など
何らかの開発情報が出てるだろうと予想していたからです。

最初の使用感などから徐々に詳細に踏み込んだり、実際に応用を試したりと
そんな流れを想定していました。まだ動きがないので、もしかしたら Windows7
のリリース待ちかもしれません。
開発関連の情報があれば、この興味深いデバイスで何が出来て何が出来ないのか
明らかになってくると思います。

●アプリの追加

売りである光センサー液晶パッドには最初からいくつかのアプリケーションが
組み込まれています。手書き文字対応辞書やゲーム、電卓や手描きツールまで
一通りそろっています。

ここにはさらに専用のアプリを追加することができます。

まだ SDK などの配布が行われておらず、対応ソフトを自由に作れる状態では
ないのですがメーカーのサイトで新しいソフトが公開されていました。

PC・モバイル ユーザーズ倶楽部

上記サイトの「ダウンロードサービス」に「タッチソフトダウンロード」という
アイコンがあります。

 PC-NJ70/NJ80用 タッチソフト
   ゲームソフト「イルミスキャン」

早速試してみました。

●ゲーム内容

インストール手順は一般的な Windows ソフトと同じです。
ダウンロードした IllumiScanInstaller.exe を実行します。

完了するとタッチパッド部のホームメニュー「エンターテインメント」の中に
アイコンが追加されており、イルミスキャンを遊べるようになっています。

Windows7 RC に入れましたが問題なく組み込み&実行できました。

ゲーム内容は、表示された丸いマーカーを指で隠していくというもの。
一度に複数のマーカーが現れるので、そのすべてを指で覆います。
マルチタッチでないとできない操作だし、いくつでも検出可能な光センサーだから
こそ実現できる内容といえます。

ゲーム内容の方は反応がいまいちなのか自分の操作が下手なのか、音で反応は
するけどうまく進めなくて時間切れです。遊び方のヘルプを何度も見返したものの
どうもうまく遊べませんでした。

でもこのアプリ、真に見るべきところはそこではないようです。
ゲーム中は余裕がなくて気がつかないのですが、上のメイン画面の方に
タッチパッドに触れている指の影がうっすらと映っています。

mebius pc-nj70a
↑三本指

mebius pc-nj70a
↑タッチペンを置いてみたところ

おそらくタッチパッド部分で取り込んでいる映像だと思われます。
タッチペンなど、きちんと形が取れているのがおもしろいところです。

今までのアプリでは、一般的なタッチパッドとしての使い方からあまり大きく
外れたものではありませんでした。
イルミスキャンでは本当に画像として実データを見ることが出来るので、
初めて光センサーらしさを実感できた気がします。

●インストールまで

イルミスキャンでゲームより手間取ったのはダウンロードまでの道のりです。
無料ダウンロードだけどユーザーズ倶楽部への会員登録が必要です。

ユーザー登録には名前住所など個人プロフィールが必要になるので書き込みます。
その途中で所有している SHARP 製品の登録番号を入れます。
製品をユーザー登録すると得られる番号らしく、仕方なく先にこちらも登録。

するとまた同じように名前住所などを書き込む欄があって製造番号も入れます。
これで登録番号が得られたので、あらためて ユーザーズ倶楽部の ID を取得します。

ちょっと試したいだけなのに 2度手間のような登録作業や、何度も書かされる
個人情報など、義務感がなかったら途中であきらめていたかもしれません。
本体を所有していれば勝手につながってダウンロードできるなど、何らかの
工夫が欲しいと感じました。
もっと簡単になればダウンロード数も増えるのではないでしょうか。

●タッチアプリ

比較的気に入っているのは手書き文字認識です。
ペン操作は指より操作しやすく候補も即座に出てきて気持ちよく使えます。

逆にいつも残念に思うのはメビウスの全画面乗っ取ってしまうアプリケーションです。
ゲームもタッチパッド部だけで遊べるものが多いのに、関係ないはずの上の
ウィンドウズ画面も奪われます。

マウスモードとタッチメニューはいつでもワンボタンで切り替えできます。
電卓等は他の作業中でもいつでも呼び出せるのが良いところ。
ゲームも同じように呼び出せたら便利だと思うのです。

たとえばブラウザを開いた状態で、ファイルのダウンロード中だけちょっとだけ
パズルを進めておきたい、と思ってもできない。
ゲーム中マウスモードには切り替えられても、上のフルスクリーン画面が残るので
結局アプリを終了しなければならないからです。

PC に統合された光センサー液晶パッドは、1つのことに専念するような使い方より
気軽に呼び出せる方があっていると思います。

イルミスキャンでは、タッチパッドに乗せた物体の形を判別できることがわかりました。
タッチパッドとして無理に使うより、光センサーにしかできないことを考えた方が
良さそうですね。

関連エントリ
メビウス PC-NJ70A (7) 一ヶ月後
メビウス PC-NJ70A (6) ユーザーインターフェース
メビウス PC-NJ70A (5) サブモニタ
メビウス PC-NJ70A (4) 使用感
メビウス PC-NJ70A (3) Windows7 RC を入れる
メビウス PC-NJ70A (2) 初期セットアップとメモリ増設
メビウス PC-NJ70A 液晶センサータッチパッド
メビウス PC-NJ70A 画面解像度とタッチ