2017年4月15日土曜日

Managed DirectX を Windows10 で導入して DXPresentation を動作させる

次のリンクからdirectx_Jun2010_redist.exeをダウンロードする。
実行すると、ファイルの展開場所を聞かれるので適当なフォルダを指定する。
フォルダの中のDXSETUP.EXEを実行するとDirectX9cをインストールすることができる。

DirectX End-User Runtimes (June 2010)

これでDXPresentationを実行できる。しかし、マウスカーソルの表示がおかしいようだ。

2017年3月4日土曜日

チューリッヒのドライブレコーダーZ-Assistを取り付けた

チューリッヒ保険のドライブレコーダーZ-Assistを自分の車に取り付けた。
Z-Assistはチューリッヒの自動車保険を契約すると貸してもらえる、緊急通知機能つきのドライブレコーダーである。3G通信モジュールを内蔵しているのが面白い。

細かい仕様の情報がネットに少なく事前にほとんどわからなかったので、箇条書きで書いておく。(特にスマートフォンを使った通信と内蔵3Gモジュールを使った通信の使い分けがよくわからなかった)
  • Z-Assistは事故などで強い衝撃をうけると、加速度センサーから得たG値とGPSから得た位置情報を、3G通信を使ってチューリッヒに自動的に送信する。このため3GのSIMカードが挿入されている。
  • そしてチューリッヒから利用者に対しては、あらかじめ登録しておいた電話番号へ連絡・プッシュ通知がおこなわれるらしい。
  • 緊急通知ボタンがあり任意のタイミングでチューリッヒに通知することもできる。
  • Z-Assistは事故などで強い衝撃をうけると、そのとき記録していた事故のビデオや走行データを、Wifiを使ってスマートフォンのアプリに渡し、そこからチューリッヒに送信することができる。
  • Z-Assistは東芝製。動画の画質はとても悪い。動画フォーマットはMP4、15fps、640x480ピクセル、ビットレートは600kb/sくらい。白飛びがひどい。この画質では事故時の調査資料やある程度の証拠になるとは思うが、ドライブ動画として楽しむような用途には適さないと思う。音声はない。超広角。
  • Z-Assistは電源がはいっていれば常時録画する。録画データは8Gbytesの内蔵メモリに記録される。車両が停止するたびに別のファイルになっているように見える。時刻が#時:#0分になるたびに、つまり10分毎にファイルが生成されているようにみえる。それらをスマートフォンのアプリを用いてWifi経由でダウンロードできる。このときユーザーはサムネイルを取得し、ダウンロードリストを作り、そしてダウンロードする必要がある。この手順はタスク志向なUIとはかなり離れたものなっていて、タスク分解をユーザー自身がする必要があり理解はできるが使いにくい。また車の運転が終わったあとエンジンを切らずに結構な時間をかけて手動でダウンロードする使い方になり、もどかしい。
  • スマートフォンにダウンロードしたドライブ動画をPicmvrで転送しようとしたが、保存場所がよくわからなかった。MTPで見える場所に動画ファイルが無いような気がする。とりあえず共有機能を使ってOneDriveにコピーすることはできた。(追記:SDカードのAndroid\data\jp.co.toshiba.zassist\Videoに動画ファイルがあった。MTPで見ることはできない)
  • トヨタのアクアにDIYで取り付けた。説明書通りにフロントガラス上20%以内でドライバービュー的に邪魔にならずなおかつワイパーの動作範囲内で、というと一箇所しか取り付け場所がないと思った(下図)。

Picmvr 0.75を公開した


変更点は以下の通り。
  • 転送ルールの削除・複製・移動が全くできなくなっていたので修正した
  • 転送準備中においてを処理を中止するボタンが表示されず、そのほかのUIも意図通りに表示されなくなっていたので修正した

ダウンロード:
http://www6.plala.or.jp/nyk/Picmv.html

2017年2月25日土曜日

Picmvr 0.74 を公開した / MTP/PTPを使ったファイル列挙が恐ろしく遅いデジタルカメラの問題

0.72からの変更点は以下の通り
  • 転送終了後の処理としてファイルを読み取り専用化できるようにした(設定メニュー)
  • MTP/PTPを用いたファイル名列挙が非常に遅いデジタルカメラ機種があった。これに対処するため転送除外フォルダの設定をできるようにした(設定メニュー)。
  • MTP/PTPポータブルデバイスの名前が取得できないスマートフォン機種があったので修正した。
  • 読み取り専用ファイルに対する上書き処理はこれまでエラー扱いだったが、スキップ扱いに改めた。
  • MTP/PTPポータブルデバイスのコピー履歴によるスキップ処理において、小文字が含まれているファイル名に限り、正しくスキップされないことがあったので修正した。
  • UI調整

MTP/PTPを使った転送処理で、ファイルの列挙がとても遅い機種があった。具体的には手持ちのニコンとソニーのあるカメラだ。あまりにも遅いので苦肉の策としてver.0.73において転送除外フォルダ設定をできるようにした。

ここで不思議なのはファイル列挙は遅いがファイル転送は遅くないことである。

それらのカメラのファイル列挙はWindowsのエクスプローラーでも遅かった(ファイルが徐々に現れるさまが目視できるくらい遅い)。だからPicmvrのコード・アルゴリズムのせいではなさそうだ。
また、手持ちのiPhoneやAndroidスマートフォンのMTP/PTPによるファイル列挙はとても高速に動作した。だから、プロトコルとしてのMTP/PTP自体の問題ではない。
ということは、それらのカメラのMTP/PTPファイルの列挙する処理の何かが重いように見える。


2017年1月26日木曜日

Picmvr 0.72を公開した / WPFアプリのローカライズ

0.72では細かい修正のほかに、英語版を追加した。このとき発生したローカライズ作業について書いておく。

WPFアプリをローカライズするときは、言語リソースをサテライトアセンブリとして配布するのが普通だと思う。アセンブリはResource.resxのテーブルに書いてVSで作る方法や、使ったことはないがLocBamlというツールを使って生成する方法などがある。

しかし、今回Picmvrでは、とにかくローカライズの手間を減らしたかったのでサテライトアセンブリを作らなかった。どれくらい手間を減らしたかったというと、言語リソースファイルすら一つも作りたくなかった(特に言語リソースの文字列それぞれのリソース名を考えたり見るのが苦痛で、匿名リソース的なものにできないかと考えていた)。

そこで、今回C#とXAMLの文字列リテラルを擬似的に多言語化して記入することにした。これはText="$りんご$Apple"的な記法を使う。そしてC#とXAMLに対応したプリプロセッサ的なツールを作り、そのソースコード内のリテラルをビルド時に解決するというやり方をしてみた。一応うまくいったようだ。

ローカライズ情報がC#とXAMLコード内に完全におさまるので、翻訳の分業には全く向かないが、プログラマが一人でプログラミングと全翻訳を担当するケースであれば作業効率の点でなかなか良いかもしれない。プリプロセッサ的なツールの設計・実装からローカライズまで短時間でできた。いつものようにソースコードを書くだけで、翻訳テーブルを広げて編集するような手間は発生しない。

配布アプリは、言語リソースがなく、EXEファイルに言語情報が完全に含まれる非グローバルなアプリと同じような構成になる。そしてVSのソリューション構成の方に別言語が追加される。

ビルドのたびにローカライズ処理が発生するのが難点。またBlendなどでのデザイン編集がとてもやりにくくなる。

ダウンロード:

2017年1月22日日曜日

Picmvr 0.71を公開した

0.71の変更点:
  • 設定の保存ができなくなっていたので修正した
  • プログラム更新の有無をネット経由で確認できるようにした(ヘルプメニュー)
  • 細かいバグの修正
ダウンロード:
https://sites.google.com/site/hashimotonaoyuki/picmvr

Picmvr 0.70を公開した

0.70の変更点:
  • 転送準備処理のマルチスレッド設計を大幅に変更して高速化・安定化した
  • USBケーブル接続(PTP/MTP)時の転送準備処理のキャンセルと進捗表示サポート
  • 細かいバグの修正
ダウンロード:
https://sites.google.com/site/hashimotonaoyuki/picmvr

2017年1月20日金曜日

Picmvr 0.60を公開した

ようやくiPhoneやAndroidスマートフォン、デジタルカメラからUSBケーブル接続で直接転送できるようにした。
これまでPicmvrはUSBマスストレージクラスを使った接続だけをサポートしていた。WIAを使った転送を試してはいたが動画に対応できなかったので今回、PTP/MTPを使ったWPD(Windows Portable Devices)との接続をサポートすることにした。
なお、手元のCOOLPIX S7000、iPhone4S、ACER Liquid Z530などで動作確認をおこなったが、他のメーカーのデジタルカメラではテストをしていないので動作があやしいかもしれない。また大量にファイルがある場合、マスストレージクラスよりもファイルの列挙に時間がかかる場合があるようだ。この場合でもUIスレッドはブロックしていないが、今のところ進捗を表示していない。この部分は今後改善したい。
この機能は、先週買ったCOOLPIX S7000がマスストレージクラス接続をサポートしていなかったので作った。

ポータブルデバイスとの接続・転送方法:
  1. Picmvrを起動し、転送設定をします
  2. 設定メニューのポータブル接続のチェックボックスをチェックします(下図)
  3. PCとMTPデバイス(カメラ・スマートフォンなど)をUSBケーブルで接続します
  4. コピー/ムーブボタンをクリックして転送します

0.60の変更点:
  • ポータブルデバイス(デジタルカメラ、Androidスマートフォン、iPhone)とUSBケーブル接続(PTP/MTP)をサポートした。
  • サムネイルの転送アニメーション表示を抑止できるようにした(設定メニュー)
ダウンロード:
https://sites.google.com/site/hashimotonaoyuki/picmvr

2017年1月8日日曜日

Picmvr 0.53を公開した

 変更点:
  • UI調整(チェックボックスのスタイル、Webリンクのスタイル、Twitterアカウントへのリンク追加、メニュー文言調整、フォント調整、アイコン等調整、カラー調整、その他)
  • 関連付けされたアイコンを表示するようにした
  • 転送ルールビューの水平スクロールバーが出現しなかったので修正した。
  • 転送ルールビューの転送ルールロック時のビジュアルを修正した。
  • アニメーションの一部を抑止できるようにした(設定メニュー)

ダウンロード:
https://sites.google.com/site/hashimotonaoyuki/picmvr

スクリーンショット:


2017年1月1日日曜日

Picmvr 0.52を公開した

変更点:
  • アイドル時のCPU負荷が大きい問題を修正した
  • 転送プレビューウィンドウにGoogle Mapsを表示するかどうか選択できるようにした(設定メニュー)
  • 転送ルールのロックアイコンを追加した。
  • コピー前のコピー履歴参照処理のパフォーマンスを改善した
  • UIの調整
「アイドル時のCPU負荷が大きい問題」はver.0.32から発生していたようだ。現象としてはPicmvr起動時にDispatcherTimerインスタンスを生成しInterval未設定のままStart()していたところ、大きなCPU負荷が継続的に発生していた。
このタイマーは不要なものを消し忘れていたものだが、Tickイベントハンドラを登録していなかったのでパフォーマンス的に無害な状態になっていたと思いこんでいた。しかしUIスレッドのCPU時間をかなり消費していた。タスクマネージャで現象を発見しプロファイラ総動員で原因を追求した(大晦日に)。

ダウンロード:
https://sites.google.com/site/hashimotonaoyuki/picmvr

スクリーンショット: