2017年3月4日土曜日

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

スクリーンショット:

2016年12月28日水曜日

Picmvr 0.51を公開した

変更点は以下の通り。
  • 転送終了時のフォルダ自動開き機能を転送した全てのフォルダに変更
  • UIの外観とレイアウトの調整

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

スクリーンショット:

2016年12月22日木曜日

Picmvr 0.50を公開した。


変更点は以下の通り。今回はインストーラ版も追加した。
  • UIのレイアウトを大幅に更新した
  • デジタルLED風の数字表示処理のパフォーマンスが著しく悪かったので修正した
    • この部分だけ見ると数倍のスピードアップになっている。表示するためのアイテムコンテナのリサイクル処理が不十分で、LED風数字コントロールのインスタンシングが過剰におこなわれていた。
  • ドロップ時の元ファイル削除設定をメディア転送時の削除設定とは別個のものにした
  • GPSファイルを自動収集する機能を追加した(GPSドロップUIのコンテキストメニュー)
  • 転送終了時に最後に転送したファイルを開けるようにした(設定メニュー)
  • 転送終了時に最後に転送したファイルのフォルダを開けるようにした(設定メニュー)
  • 転送終了時にPicmvrを終了できるようにした(設定メニュー)

UPDATE 
2016.12.22 7:17に、環境によって下向き矢印の表示がうまくいかないバグを修正し、ver.0.50.6200.12874として差し替えました。原因はフォントWingdings3がインストールされていない環境を考慮していなかったため。使いたい文字をあらかじめパスに展開して埋め込んで対処した。

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

スクリーンショット: