Archives

May 2009 の記事

●タッチパッドのところに iPhone が埋まってるやつ

iPhone / iPod touch を使っていると、マウス代わりにこれでそのまま PC操作
できたらいいんじゃないかな、と思うことがあります。
タッチパッドの感触はなめらかでレスポンスも速いし、マルチタッチもわかりやすく、
スクロールなどの操作も心地よく動いてくれるからです。
(実際に iPhone をタッチパッド代わりにできるアプリもあるようです)

本当にそれを実現しようとしたのかどうかわかりませんが、
SHARP メビウス PC-NJ70A の見た目はまさにそれ。
センサーの仕組みはともかくマルチタッチ対応のパッドに液晶画面もついていて
独自のアプリも動くという。なんか埋まってます。

そのメビウスがようやく手元に届いたので使ってみました。

現実はそう甘くはないようです。


●光センサー液晶パッドのモード

・マウス操作モード
・タッチ操作モード


●マウスモード

mebius pc-nj70a

通常はマウスモードで、ノートパソコンの一般的なタッチパッドとして機能します。
特徴的なのは以下の点

・表面がつるつる
・パームレストと一体型
・サイズ大きい、幅が広い
・ボタンが 3つあるけど 2ボタンマウス相当
・マルチタッチ
・多少のビジュアルエフェクトがある

つるつるなのはおそらく光学式センサーの光を通す必要があるため。
光が透過しさえすれば透明な素材で全体を覆ってしまっても構わないのでしょう。

ボタンは残念なことに 2ボタンでした。
VAIO type P は中ボタンがついていて 3ボタン。
液晶パッドの真ん中のボタンは「マウス操作」と「タッチ操作」の切り替えです。

マルチタッチの活用として二本指スクロールがあります。
EeePC 901 等と同じです。

液晶パッドの画面には、タッチ位置に遅れてついてくる光のカーソル演出があります。
この辺は設定で変更できるようです。


●タッチ操作モード

mebius pc-nj70a

真ん中ボタンでタッチ操作モードに切り替えると、液晶パッドにメニューが出てきます。

ここでタッチを活用した独自のアプリケーションを走らせることが出来るようです。
マウスカーソルを使うウィンドウズアプリと違って、こちらは直接触って操作
できるのが特徴。

しかも光学センサー液晶パッドは他の方式と違い

・マルチタッチ対応 (何点でも?)
・静電容量式のように指が触れただけで反応する
・ペン操作もできる

等と利点も多数あります。
しかしながら画面の呼び出しや表示切り替えは決して速いとはいえず
なめらかなアニメーション演出も期待できません。

例えば電子ブックリーダーでは本のタイトル一覧が表示されるのに、タッチ操作では
上下にスクロールできません。マウスの左右ボタンで上下のページ切り替えだと
気がつくのに若干時間を要しました。(一応二本指スクロールは出来るけど描画が
ついてこない)

アプリケーションの作り込みの甘さや描画速度の遅さ、反応の悪さなど、可能性の
あるセンサーやデバイスをまだまだ使いこなせていないようにみえます。

サブ画面用に描画アクセラレータが乗っていないのか、メインメモリからの描画
転送がボトルネックなのかはまだわかりません。

センサー自体は大変ユニークで、例えば「エンターテイメント」に入っている
ピアノのアプリはマルチタッチを実感できます。
とりあえず指 4本のタッチ座標が取れているのは確認できました。

HP TouchSmart PC IQ800 のマルチタッチは 2点までだったので、今後 SDK が公開
されたり Windows7 用ドライバが出てくれば、さまざまな活用が考えられます。
今後に期待ですが、「iPhone / iPod touch が埋まっている」の域まで達するには
まだまだかかりそうです。

なおタッチ操作モードではマウスカーソルが動かないので PC の操作ができません。
外付けのマウスをつないでおけばタッチモードでも普通に使えました。


●まとめ

ネットブックなど多くのノートパソコンがあふれる中で、普通じゃない機能を持った
PC であることは確かです。
実用性よりもまずはこの点をおもしろいと思えるかどうかが評価の境目となるでしょう。
これからしばらく実際に持ち歩いて使いつつ、まずは普通の PC としてセットアップ
してみます。


関連エントリ
メビウス PC-NJ70A 画面解像度とタッチ
Windows7 とマルチタッチ / HP TouchSmart PC IQ800


VisualStudio 2010 beta1 を使ってみました。
環境は Windows7 RC + Windows SDK for Windows 7 RC。

とりあえずコンパイラオプションを見ると x64 に arch オプションが増えていることがわかります。
「 /arch:AVX 」すでに intel AVX に対応している様子。

実際にコンパイルすると C5 命令が見えます。
浮動小数演算部分でちょうど SSE/SSE2 命令が AVX で置き換わっている形です。
実行するとやっぱり Illegal Instruction。

float	af= 1.3f;

C5 FA 10 05 C3 51 0E 00 vmovss      xmm0,dword ptr [__real@3fa66666 (13FD5CE2Ch)]  
C5 FA 11 44 24 74    vmovss      dword ptr [af],xmm0 

直接 AVX 命令を使うには immintrin.h を include する必要があるようです。
immintrin.h には AVX の 256bit 長のデータ型 __m256 が宣言されていました。

他に追加されたオプションは auto の扱い方です。
VC++ 2010 は auto や decltype といった宣言で型をコンパイラに判断させることができます。
キーワードの意味が変わったので /Zc:auto- で無効にできるようです。

MSDN auto Keyword

VC++ 2010 はこのように新しい言語仕様を取り入れていて、面白い機能がいろいろ
増えています。
たとえば lambda 式が使えるようになってること。

auto f_mul= []( int a, int b ) ->int { return a * b; };

宣言した無名関数をオブジェクトとして受け取れます。楽しい!
[] は capture の宣言で、クロージャーへ変数を渡す手段を記述するようです。
コピー [=] と参照 [&]、または変数個別に指定できます。
返値の型は return 文で類推しますが引数のあとの -> でも指定できます。

MSDN Lambda Expressions in C++

auto は型を自動で判別する変数宣言で、型そのものを受け取るなら decltype() が使えます。

&& 宣言は右辺値参照。代入可能な左辺値ではなく、値としての右辺値を
参照で取れるというもの。

Rvalue Reference Declarator: &&

実際に定数値でも参照可能となります。
この宣言は const でないので書き換えもできました。

int&& dd= 3;
dd++;

disassemble して生成コードを見ると、無名の auto 変数へ代入してからアドレスを
取っています。
どうやらこれが本来束縛されていないテンポラリで、右辺値参照によってこのような
無名領域へのアクセスが可能になるようです。
加算もその領域に対して行われています。

実際どのように使えばどんな効果があるのか、下記ページをかなり参考にさせて
いただきました。

ntnekの日記 和訳:Rvalue References: C++0x Features in VC10, Part 2

特に効率化は期待できるようです。
例えば C++ では一時オブジェクトが何度も生成破棄されることがありますが、
受け取った引数がすでにコピーされた一時オブジェクト(右辺値)とわかっているなら
そのまま再利用してもかまわないというわけです。
コピー元のオリジナルなら左辺値。

右辺値参照の宣言は、一時領域へのアクセス手段を手に入れると同時にこのような区別も可能になります。

非常に面白いです。
今日は本来の作業の目的を忘れてずっと VisualStudio 2010 。


SHARP メビウスのモニターに当選してしまいました。

募集がすぐ終わったとか倍率高いとか新しいセンサーを使っているとか、
ちょうどその話をしていた直後だったので目を疑いました。
なにせ「募集時点ではスペックや詳細が未発表だったので、自分はもっと小型の
デバイスを期待してた・・」とかその場で興味なさそうに発言してた本人が
当たってしまったのだから尚更です。

すでに発売されているようですが、モニター自体は来週以降なので少々待たされます。

SHARP Mebius PC-NJ70A

スペック的にはほぼ一般的な Atom N270 PC です。
特徴的なのは独自のタッチパッド。
液晶画面がついているだけでなくセンサーも兼ねた代物で、画素一つ一つが光を
読み取っているようです。
この新しいデバイス&センサーは使ってみたいところです。

もう1つ興味あるのは、タッチパッド部の液晶も結構解像度が高いこと。
854x480 ドットというと初代 EeePC 701 とほぼ同じ広さな訳ですから
この中でデスクトップやらブラウザやら普通に動かしていたことになります。
タッチパネル部のサブ画面をウィンドウズでどこまで自由に使えるかわかりませんが、
画面を広くするためのひとつの方法かもしれません。

思い返すと初めて買ったノート PC がSHARP メビウス ワイド PC-W100 でした。
メビウスワイドの画面は偶然にも同じ 1024x600 ドットです。

ネットブックが出てから 1024x600 ドットはごく普通のありふれたサイズに
なりましたが、13年前の当時は大変珍しいものだったのです。
横をのばしたというよりも 1024x768 から縦を削ってキーボードを圧迫せずに
本体サイズを小さくしようとしたもの。

当時のスペックをあらためて見ると Windows95 で RAM は 16MByte に HDD 1GByte。
CPU も Pentium 133MHz。さすがに 13年の年月を感じます。
これでも当時は DirectX3~5 を入れて Direct3D の RampDriver でプログラムを書いていました。

メビウスワイドから今まで、この間に使ってきたノート PC は
1024x600~1024x768 が圧倒的に多かったことに気がつきます。
記憶容量も演算速度もバス速度も描画速度も著しく向上しているはずなのに、
意外なほど長期間にわたって小型ノート PC の解像度が変化しませんでした。

もちろん最近は LOOX U の 1280x800 や VAIO type P の 1600x768 のように、
より詳細な液晶画面を搭載するものも出てきています。

PC-NJ70A を見て思ったのは、高解像度化に消極的なメインの液晶画面の代わりに
サブモニタを増やしてマルチ画面化するのも小型ノートパソコンの方向の 1つとして
ありなのかもしれないということ。
CPU が Multi core 化するように。

あとはサブ画面をどこまで自由に使えるか。
もしかしたら Windows SideShow でしょうか。
無理かもしれないけど理想はデスクトップの延長として使えることです。
Windows7 だと multi touch API が整備されているので、もしドライバがあるなら
すぐにでも使いたいところです。
現在 Multitouch 対応 PC として HP TouchSmart PC IQ800 を触っていますが
外周にセンサーを配置した光学式で 2点まで同時に識別することができます。
PC-NJ70A ではもっと自由に点を取れたらいいですね。

期待点まとめ
・タッチパッドとして
・画面の拡張、サブ画面として
・マルチタッチ対応センサー付きモニタとして
・別の入力手段として、位置的に親指シフトキーを配置できたりするかも


関連エントリ
Windows7 とマルチタッチ / HP TouchSmart PC IQ800


Windows7 RC と同時に WindowsSDK の RC 版も出ています。

Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1: RC
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1: RC (ISO)

BETA 時点からタッチ周りの API など変更されているところがあるので要注意です。
たとえば WM_TOUCHDOWN, WM_TOUCHUP, WM_TOUCHMOVE 等は無くなり
WM_TOUCH に統一されているようです。

マニュアルも更新されています。
以前 User Interface の下にあった Touch 関連が Windows Touch
という新項目にまとめられています。このあたり力が入ってます。

MSDN Windows Touch

Direct3D11 関連も DirectX SDK March 2009 より新しいものが含まれていました。
ただし d3d11.lib などの lib 名に _beta がついていないので include の順番に
注意した方が良さそうです。
Vista で使う場合は DXSDK の方を。


関連エントリ
Windows7 Multitouch API その(2) WM_GESTURE 系
Windows7 Multitouch API
DirectX SDK March 2009


Windows7 RC を入れた type P はAero がそれなりに動いているので印象が変わりました。
現在透明感 off で使用しています。

・個人設定→ウィンドウの色→「透明感を有効にする」のチェックを外す

半透明ではないもののウィンドウの重なりがハードウエア描画なので速いです。
たとえばウィンドウ移動とか最小化のアニメーションとかそこそこスムーズに
できますし(たまにかくつくけど)、タスクバーにマウスカーソルを乗せると
ウィンドウの縮小イメージもポップアップで出ます。
ウィンドウの中の描画速度は変わらないけど、操作の印象は良くなりました。

たまに背景の描画が追いつかないのか真っ黒に崩れることがあります。
フレームバッファが消えてしまった状態ですが、以前から同じ症状があった気がするので
また違う問題かもしれません。


Aero が動くということは D3D も動くようになったということ。
GMA500 がどの Feature Level まで対応しているのか Direct3D11 で試してみました。
結果は残念ながら FEATURE_LEVEL_9_1 ~ 3 も未対応。
ハードウエアでは動作しませんでした。

Direct3D11 サンプルや一部のアプリケーションが動くのは、ソフトウエアレンダラ
WARP Device を呼び出しているからです。
D3D11CreateDevice~() の D3D_DRIVER_TYPE_HARDWARE でエラーが出た場合、
D3D_DRIVER_TYPE_WARP できちんと作り直しているアプリは動きます。
D3D11 サンプルが動いて D3D10 が動かないのはおそらくアプリが WARP に対応していないから。
D3D10 LEVEL_9_1 ~ に対応していないということは Direct2D を使う場合もおそらく
CPU レンダラになります。
ハードウエア対応は今後に期待。現状未対応でもとりあえず動くのは WARP のおかげです。

●結論
GPU は Direct3D 9 3.0 まで対応しているものの、
現状では Direct3D10/11 の下位モードの Level9 でも動作せず。
WARP なら動く。


関連エントリ
VAIO Type P の Windows7 RC は Aero が有効


2009/05/10
Atom vs Core i7

コンパイル時間

(1) Atom Z540    11分44秒 (704秒)
(2) Core i7 920      37秒

(1) 詳細
Atom Z540 1.86GHz 1core 2threads
RAM 2GB, SSD 64GB (VAIO type P), AC電源
Windows7 RC x86, Aero ON
VC2008 cl /MP4 (4thread指定)

(2) 詳細
Core i7 920 2.66GHz 4core 8threads
RAM 6GB, HDD 1TB
Windows7 RC x64
VC2008 cl /MP10 (10thread指定)

実行したのはライブラリのコンパイルでコマンドラインから /MP スイッチ付き。
x86 debug, x86 release, x64 debug, x64 release の 4種を全部作成。
同じファイルを何度も読む+コンパイル自体数回実行したので
RAM が多ければソースはキャッシュに乗ってる状態です。
ただし同時に 8 file 未満のコンパイルが行われることもあるので CPU は 100% 埋まっていません。
スレッドがすべて埋まる条件なら core 数の多い Core i7 とはもっと速度差が開くと思います。
おそらくもっと速いでしょう。

仮に Atom が 4core で、ストレージとバスの影響を無視して 4倍速になると仮定しても 176 秒。
さらに Atom が同じ 2.66GHz で動いたとしても 123 秒。
多めに見積もってもまだ 3.3 倍開きがあります。


超多忙が和らいだので VAIO type P に Windows7 RC を入れてみました。
BETA と同様クリーンインストールです。ドライバはほぼ自動で入ります。
一つだけ不明なデバイスがありましたが、おそらく Fn キー周りと思われます。


(1) 準備
 Windows7 RC x86 DVD
 USB 接続の DVD ドライブ
 VAIO typeP のプリインストール Vista から取り出しておいたドライバフォルダ
   C:\Windows\drivers の下

(2) インストール
 外付けドライブから起動したあと 64GB SSD を全部消してクリーンインストールです。

(3) ネットワーク設定を行い自動更新します
 推奨にもチェック。ドライバが入ります。

(4) 不明なドライバを入れます
 デバイスマネージャーを開いて不明なデバイスのドライバを検索
 (1) で保存しておいたフォルダを指定すれば勝手に入ります。

(5) Wireless LAN ドライバの入れ替え
 そのままでも無線 LAN ドライバが入りますが 150Mbps 接続だったので入れ替えました。
 300Mbps 接続になりました。
 デバイスマネージャーからネットワークアダプター
  → Atheros~ の上で右ボタンからドライバーソフトウエアの更新
  → コンピュータを参照して~を選択
  → 自動検索だとすでに最新といわれるので、下の
    「コンピューター上のデバイスドライバーの一覧から選択します」を選ぶ
  → ディスクの使用ボタン → 参照
  → (1) で保存したフォルダから 「Wireless LAN Driver (Atheros)」を選択して OK
  → そのまま次へ、でドライバが入る

(6) エクスペリエンスインデックスの計測
 いろいろ設定する前に「コンピューター」のプロパティから
 Windows エクスペリエンスインデックスの評価を実行しておきます。
 少々時間がかかりましたが、評価が終わったら Aero Glass が有効になっていました。

プロセッサ          1.2  (Z540)
メモリ               4.1
グラフィックス(Aero) 2.9
グラフィックス(Game) 2.4
ハードディスク       5.9  (SSD 64GB)


(7) 画面の輝度調整

 BETA 同様下記ソフトで代用。ボリューム調整は何もしなくてもできます。
backlightwin 1.00


● Windows7 RC 描画

ドライバの不具合が無くなったのか DWM も動いており、起動時のエラーダイアログも無くなっています。
これで動作確認のために Vista を残しておかなくてもよくなりそうです。
Aero Glass も動くようになりました。Vista 上で使うより多少ましに見えます。
透明感の設定を外すと少々軽くなります。

Direct3D11 サンプルもいつもの MultithreadRendering11 は一応動きました。
動作は 0.14fps、リファレンスと間違えるほど重いです。
Feature Level が 10.1 なので調べるとソフトウエアレンダラの WARP Device が使われていました。
Direct3D9 はきちんと GPU で動いています。
この辺はあとでもう少し詳しく調べてみます。


● Windows7 RC 全般

スタートメニューの個人用フォルダーが Vista 同様の個人フォルダに戻りました。
ライブラリはメニューとして分離しています。個人的にはこれが一番うれしい変更です。
BETA ではタスクバーに desktop のツールバーを置いて代用してました。

その代わり多用していた新規作成のショートカットが W から X に変更されてしまいました。
これ今までも何度も変更されているのであきらめています。

マイコンピュータのプロパティ(システム) にこんな表示が
「Pen and Touch: No Pen or Touch Input is available for this Display」


関連エントリ
VAIO type P Windows7 beta とバックライト調整など
Windows ノート PC の backlight の明るさ変更方法