C#でCNTK - 起動時のDLL読み込みエラー対応 ― 2018年11月01日 19:39
CNTKでMLに挑戦。学習用のデータの準備に目処がついたので、モデルの学習と検証のアプリの構築に取りかかる。いまさら、Pythonに取り組むのもなんなので、C#で頑張ってみる。こちらのライブラリも順次拡張中。
UWP向けには、C++のライブラリしか用意されていないので、WPFによるデスクトップアプリで実装。nugetからパッケージを導入。計算用のデバイスを確認するコードで動作確認。すると、DLLの読込で例外発生。
C++のEEMessageExceptionが発生し、System.TypeInitializationExceptionがスローされている。
調べてみると、CNTKのライブラリはx64のみで提供されるところ、アプリをx64でビルドしないと発生するとの記事が見つかる。デフォルトの「Any CPU」でも自動判別されるはずだが、それではうまくいかないらしい。
構成マネージャを起動すると、デスクトップアプリのプラットフォームでは、「Any CPU」しか選択できない。プルダウンメニューで[<新規作成>」を選び、「x64」を追加しようとするが、うまく追加できない。
ポイントは、「新しいソリューション プラットフォームを作成する」のチェックを外すこと。図では、後からキャプチャしたのでx86になっているが、「x64」を選択後、チェックを外して、OKを押下する。
ビルドして実行すると、無事に起動。ただし、アプリのサイズはかなり大きくなる。GPUの無い環境でGPUを選択したので、例外発生のメッセージを表示している。
Windowsアプリケーションパッケージプロジェクトを追加し、デスクトップブリッジに対応しておけば、GPUのあるリモート環境への配置やデバッグ実行も容易にできる。
画面属性と制御 - アプリリリース ― 2018年10月17日 12:40
「画面属性と制御」の名称でWindowsストアアプリをリリース。デスクトップブリッジを用いたふたつめ。Windowsストアの方で通常の手続で審査を受け付けるようになってからは、ひとつめ。審査を通すのにそれなりに苦労したのは既述の通り。
※アプリのページ
もともとは、複数のディスプレイをつなげた環境で、ディスプレイのオンオフを行う意図。ディスプレイの消費電力はかなり大きい。なかでもIPSパネルは大きめ。しかし、個別のディスプレイの電源制御は、ドライバが対応していないことが判明し、そのあたりの属性の確認と、システム全体でのディスプレイのオフを実装したもの。オフ自体は、スクリーンセーバで電源を切るのと同じ。
システム全体のディスプレイのオフでも、それなりには役立つ。手動でディスプレイの電源を切っていくと、Windows10のバージョンにもよるが、アプリが点いているディスプレイに移動する。ディスプレイの電源を戻す度に、アプリを手で戻さなければならない。本アプリでオフにすると、アプリのウインドウの移動は起こらない。
開発時間は、30時間ほど。うち4分の1ほどは、Windowsにおけるディスプレイの扱いや、属性の理解に使ったもの。10S環境でのテストや、使用不可のAPIのUWP版での置き換えなど、いろいろ課題を見つけた開発だった。
サニティテストの結果見落とし - デスクトップブリッジ ― 2018年10月13日 10:07
デスクトップブリッジを用いたアプリの登録に苦戦。Windows 10S向けのテストの件もそうだが、なんとか突破。
Windows App Certification Testの実行後、表示されるダイアログでは、「合格」。これが曲者。
結果を表示してみると、「省略可能なテストの結果」の「サニティテスト」、「ブロック済みの実行可能ファイル」のテストが不合格。これが、「Windows 10Sで起動に失敗」とストア担当者から指摘されていた原因の模様。毎回、きちんと中を確認しなくては。
問題となっていた「System.Diagnostics.Process.Start()」は、プライバシーポリシーを掲載するWebページを開く際に用いていたもの。引数に「new ProcessStartInfo(Uri)」を指定。これについては、UWPのAPIである「Launcher.LaunchUriAsync()」で代替。
代替フォントを避けてフォントの字体を確認する ― 2018年10月11日 16:58
字体を確認するツールを作っているが、フォントが用意していない文字コードを指定すると代替フォントが表示され、混乱する。
代替フォントが表示された後、XAMLのFontFamilyを確認するも、指定したFontFamilyの値を返すばかりで、代替フォントであるかどうかの判別はできない。
探してみると、Win2DでCanvasFontFaceを取得すると、そこからUnicodeRanges属性が得られ、フォントが定義されているかどうか判別できそう。
59行;システムで利用可能なフォント一覧の取得。
60行;フォント一覧のCanvasFontFaceの取得。
89行;UnicodeRangesの取得。
UnicodeRangesは、FirstとLastのペアの配列。First~Lastの範囲でフォントが定義されていることを示す。
行176;与えられたUnicodeについて、UnicodeRangesで定義された範囲内かどうかを判別。効率が悪いやり方なのはご容赦。
行170;与えられたUnicodeについて、UnicodeGeneralCategoryを取得し、未設定や記号を排除しているが、代替フォントがある場合は排除できない。ちなみに、漢字はOther Letterになる。
実際にツールを動かしてみたところ。「丙」の文字。U+4E14からU+4E19の範囲内にあり、フォントが定義されている。次は、U+4E1Eに飛ぶ。この範囲だが、かなり細切れ。UnicodeRanges配列の要素はかなり多い。
これで、ゴシックを表示していたら明朝が混じる、といったことを防ぐことができる。これで、ようやくWindowsアクセサリの「文字コード表」と同じところ。
Windows 10S 向けのテスト - デスクトップブリッジ ― 2018年09月29日 18:02
ふと気がつくと、以前いろいろ苦労した、デスクトップブリッジを用いたアプリのWindowsストアでの認証手続が、通常のUWPアプリと同じになっている。
それではと、溜まっていた手続を進めてみると、不合格の通知。アプリが起動しない、という。環境を見ると、Windows 10Sで失敗している。忘れていた、ということで、Windows 10Sのテストを実施することに。
Windows 10Sのテストといっても、手許に実機はない。後で述べるが、仮にあったとしても、ストアから配布されるものでないとインストールできない。そこで、Windows 10 Proの環境にDevice Guard整合性ポリシーをセットアップしてテストを行うという。
VMwareでProの環境を一つ作り、ダウンロードしたポリシーを当てる。3種のポリシーがあり、再起動で切り替える。
ひとつめのAuditモードでは、不整合がイベントビューアに記録される。作成した環境をリモートコンピュータに指定して、Deployしたアプリを実行する。致命的でないメッセージも出力されるので、判別が難しい。
ふたつめは、テスト用に用意された証明書を使って確認するもの。手作業でパッケージを作成することになるので、それなりに手間。
手順に従い、signtoolを用い、用意された証明書を使ってサインをするが、エラー。PowerShellのコンソールメッセージに従い、調べてみると、manifestにある「発行者」に不整合がある。
手順に、AppxManifest.xmlファイルを暫定的に書き換える、とあるが、実際は2箇所。
一つは、
bin\(architecture)\Debug\AppX
にあるもの。
もう一つは、
bin\(architecture)\Debug
にあるもの。
両方の発行者を、用意されたテスト用の証明書にしたがって書き換える。VisualStudioで編集するPackage.appxmanifestはいじらない。これでエラーは解消。
用意したWindows 10Sの方では、テスト用の証明書を受け容れる準備。手順に「証明書ストアの選択」で「Trusted People」を選ぶ、とあるが、日本語の環境では、「信頼されたユーザー」。少々訳がわかりにくい。
OneDrive経由で、サインしたパッケージをWindows 10Sのテスト環境に転送し、appxファイルをダブルクリックすると、App Installerが起動し、インストールが完了。PowerShellでAdd-AppxPackageを使いたいところだが、ポリシーによってはPowerShellが起動しない。App Installerは、追加でセットアップされるので、Windows Updateで最新の状態にしておく。
これで問題なく起動すれば、OK。
ちなみに、ストアに提出用のappxuploadファイルの拡張子をzipにしてから展開し、中のappxやappxbudleをインストールしようとすると、証明書まわりのエラーになる。Windowsストア経由で入手したものでないといけない。したがって、3つめのポリシーを用いたテストは、開発段階で使えるものではない。
結果、どのテストでも問題はなく、不合格の理由は、Windows 10S由来のものではなさそう、とのオチ。
以前、合格した別のアプリの環境と見比べてみると、パッケージ作成時のアーキテクチャの選択に誤りがあった模様。Neutralを外し、x86とx64を明示的に選択しなくてはいけなかった。
タブ区切りテキストからの分析をスムーズに - 統計電卓更新 ― 2018年09月27日 13:15
実際にデータ分析を行っていると、タブ区切りテキストを読み込んでの作業が多いので、この作業の流れがスムーズになるように、統計電卓の機能を見直しました。
起動すると、データ入力画面になります。「入力データ」の左下に「タブ区切りテキストの読み込み」ボタンを設けました。押下すると、ファイルを読み込むためのダイアログが出てきます。
データを読み込んだところです。例では、気象庁から、日ごとの気温データをダウンロードし、ヘッダなどをExcelで修正し、タグ区切りテキストに出力したものを読み込んでいます。
キーパッド左上のハンバーガーメニューを開きます。上に、作業用の3つの遷移メニューを設けました。左右(又は上下)、それぞれに必要な画面を切り替える手間を省きます。
「記述統計とヒストグラム」を選ぶと左右(又は上下)の画面が、記述統計用とヒストグラム表示用に切り替わります。例では、平均気温でヒストグラムを描いています。
続いてメニューから「回帰分析と散布図」を選びます。回帰分析と散布図表示用に切り替わります。例では、横軸に年月日を摂って、日ごとの最高気温の遷移をグラフにしています。
年月日の軸を数値の軸に変えると、1次回帰のグラフを描画します。
プライバシーポリシーとサポート情報 - 統計電卓 ― 2018年09月27日 13:00
本アプリについて (About this app)
このアプリは、キーパッドから登録した数値について、平均や分散などの記述統計と、2次元データの相関および回帰の分析を行います。
※2018年9月の更新
・メニューを見直し、記述統計とヒストグラム、相関関係と散布図、への遷移をしやすくしました。
・データ一覧にタブ区切りテキストの読込ボタンを設けました。
※本アプリは、正しい結果が得られるようテストを実施し、品質確保に努めています。ただし、不具合がないことを保証するものではなく、本アプリを利用した結果生じる損害については、いかなるものについても責任を負いかねます。自己責任の範囲でご利用をお願いします。
プライバシーポリシー (Privacy statement)
対象アプリ:統計電卓
本アプリの製作者である The Fourteenth Lab (第十四工房) は、本アプリによって、お客様の個人情報およびプライバシーに関する情報を収集しません。
サポート情報 (Support)
ご質問や不具合のご連絡は、このページの「コメント欄」をご利用いただくか、「このブログについて」に記載の連絡先までお願いします。
使い方
利用方法は、アプリのメニューの「アプリの説明とプライバシーポリシー」にあります。ここでは、概略を示します。
●画面構成
縦長の画面構成を前提に説明します。
下半分)数値を入力するキーパッド、記述統計の統計量の表示部(統計量)、相関や回帰に関する統計量の表示部(相関関係)、を左右に切り替えて使用します。
上半分)入力したデータの一覧(入力データ)、ヒストグラム、散布図、を左右に切り替えて使用します。
●入力パッド
数値を入力する際、四則演算による計算ができます。最大10桁です。入力した数値、または計算結果を、「セット追加」ボタンで登録します。複数項目(変数)がある場合は、「項目追加」ボタンで登録します。
●入力データ
入力したデータを一覧形式で表示します。セット番号(行)、項目番号(列)、値、の順で表示します。データを失わないよう、適宜、保存ボタンを利用してください。リストを選択中に、編集ボタンを押すと、キーパッドの表示部の値で上書きします。
●統計量
計算対象の項目(変数)を選択すると、計算を実行します。
●ヒストグラム
「統計量」の画面で選択した項目(変数)について、ヒストグラム(柱状グラフ)を作成します。縦画面で使用する想定で、横向きです。平均値、中央値(メディアン)、平均値±2σの範囲を図示します。データの範囲が広い場合、柱の最大値を設定するボタンで、柱の数を調整できます。
●相関関係
「変数1」で独立変数、「変数2」で従属変数を選択すると、計算を実行します。
●散布図
「相関関係」の画面で選択した項目(変数)を用いて、散布図を作成します。回帰直線を合わせて表示します。
●R向けスクリプト例
RGuiでの利用例を示します。
最初に、ファイルメニューから「作業ディレクトリの変更」を行い、スクリプトとデータファイルを置いているディレクトリを指定します。
ファイルメニューから「スクリプトを開く」を選び、生成されたRスクリプトを選びます。
スクリプトが表示されたら、その上で右クリックをするとメニューが表示されます。メニューから、「全て選択」を選んだ後、「カーソル行または選択中のRコードを実行」を行います。
スクリプトが実行されます。オプションで対話型を指定しているので、クリックをするとグラフが表示されます。
●Mathematica(4.x)向けスクリプト例
ファイルメニューの「ファイルを開く」でテキストファイルを指定し、出力したスクリプト(ファイル名の最初がMで始まる)を読み込みます。
ノートブックが開くので、「SetDirectory」を適宜編集して、出力したデータファイル(タブ区切り形式)を読み込めるようにします。
なお、新しいバージョンでは、構文が変更されていますので、適宜編集してください。
スクリプトが実行されます。入力に対応する出力を確認します。
あらかじめのおことわり (FAQ)
1)数値精度
アプリの内部では、Decimal型で管理しています。割り算では、割り切れない場合に丸め誤差が発生します。丸め方は、単純切り捨てです。四捨五入はしていません。
2)電卓部分(入力パッド)
キーボードの数字や演算キーからの入力には対応していません。
3)相関と回帰
2つの変数を選択しますが、両方の変数が揃っているセット(行)のみを対象とします。「統計量」と「相関関係」でサンプル数が異なる場合は、欠損があります。
4)散布図
・対象の数値が小数点以下の場合、軸ラベルが「0」になることがあります。
・対象変数を切り替えたとき、グラフが乱れることがあります。その場合は、一度、別のタブに切り替えてから、散布図を選択しなおすと直ります。
・サンプル数が多いと描画まで時間がかかります。機種の性能にもよりますが、300個で数秒~十数秒かかります。
5)タブ区切り形式のデータの読み込み
タイトル行など、数値以外のデータは読み飛ばします。
6)R向けスクリプト例の書き出し、Mathematica(4.x)向けスクリプト例の書き出し
おまけの扱いです。本アプリで実施できる分析に相当する機能を例示します。検算や、より詳細な分析のとっかかりにしていただく意図です。必要に応じ、編集の上、利用してください。複数項目(変数)の考慮は、変数1,変数2、の決め打ちですので、それ以外の変数は、スクリプトを編集してください。
7)グラフの出力
WinRT XAML Toolkitを使用しています。
参考文献
1)東京大学教養学部統計学教室、「基礎統計学Ⅰ 統計学入門」、東京大学出版会(1994年、第8刷)
プライバシーポリシーとサポート情報 - 四則演算パズル ― 2018年07月18日 11:00
本アプリについて
四則演算ボタンと計算順ボタンを組み合わせて0から9までの整数を求めるパズルです。
※本アプリは、Windows8.1用です。
Windows10向けには、「四則演算パズル U」をリリースしていますので、そちらをご利用ください。
プライバシーポリシー(Privacy Statement)
対象アプリ:四則演算パズル
本アプリの製作者であるThe Fourteenth Lab (第十四工房)は、本アプリによって、お客様の個人情報およびプライバシーに関する情報を収集しません。
サポート情報(Support)
ご質問や不具合のご連絡は、このページの「コメント欄」をご利用いただくか、「このブログについて」に記載のご連絡先までお願いします。
あらかじめのおことわり(FAQ)
1)オプションで「効果音」の設定をオンにした場合でも、アプリ起動時、最初のうちは音が出ない場合があります。これは、画面の初期化に時間がかかっているためで、しばらくすると鳴るようになります。
2)オプションで「ヒント」をオンにすると、下段の回答欄の上に式が表示されます。機械的に求めているので、同じに見える式が複数現れることがあります。内部的には、計算順の組み合わせを網羅するために、数式にすると同じものが複数生じるためです。
3)最初の画面の統計ですが、1秒以下の数値を切り捨てるため、「ゲーム成績」と「式の完成」でトータル時間がずれます。また、ゲームを途中で止めても「式の完成」の成績は加算されます。
4)オプションの「効果音」は、ゲーム中にオンとオフの切替ができます。「ヒント」は、ゲーム中に切り替えても実施中のゲームでは有効にならず、次のゲームから有効になります。
最近のコメント