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

スクリーンショット: