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を押下する。

DeviceDescriptor

ビルドして実行すると、無事に起動。ただし、アプリのサイズはかなり大きくなる。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向けのテストの件もそうだが、なんとか突破。

AppCertTestは合格だが

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属性が得られ、フォントが定義されているかどうか判別できそう。

CanvasFontFaceの取得

59行;システムで利用可能なフォント一覧の取得。
60行;フォント一覧のCanvasFontFaceの取得。
89行;UnicodeRangesの取得。

UnicodeRangesは、FirstとLastのペアの配列。First~Lastの範囲でフォントが定義されていることを示す。

UnicodeRangesの確認

行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アプリと同じになっている。

Review Results

それではと、溜まっていた手続を進めてみると、不合格の通知。アプリが起動しない、という。環境を見ると、Windows 10Sで失敗している。忘れていた、ということで、Windows 10Sのテストを実施することに。

Windows 10Sのテストといっても、手許に実機はない。後で述べるが、仮にあったとしても、ストアから配布されるものでないとインストールできない。そこで、Windows 10 Proの環境にDevice Guard整合性ポリシーをセットアップしてテストを行うという。

VMwareでProの環境を一つ作り、ダウンロードしたポリシーを当てる。3種のポリシーがあり、再起動で切り替える。

ひとつめのAuditモードでは、不整合がイベントビューアに記録される。作成した環境をリモートコンピュータに指定して、Deployしたアプリを実行する。致命的でないメッセージも出力されるので、判別が難しい。

ふたつめは、テスト用に用意された証明書を使って確認するもの。手作業でパッケージを作成することになるので、それなりに手間。

signtoolのエラー

手順に従い、signtoolを用い、用意された証明書を使ってサインをするが、エラー。PowerShellのコンソールメッセージに従い、調べてみると、manifestにある「発行者」に不整合がある。

AppxManifestひとつめ

手順に、AppxManifest.xmlファイルを暫定的に書き換える、とあるが、実際は2箇所。
一つは、
bin\(architecture)\Debug\AppX
にあるもの。

AppxManifestふたつめ

もう一つは、
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を外す

以前、合格した別のアプリの環境と見比べてみると、パッケージ作成時のアーキテクチャの選択に誤りがあった模様。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コードを実行

スクリプトが表示されたら、その上で右クリックをするとメニューが表示されます。メニューから、「全て選択」を選んだ後、「カーソル行または選択中のRコードを実行」を行います。

R実行例

スクリプトが実行されます。オプションで対話型を指定しているので、クリックをするとグラフが表示されます。

●Mathematica(4.x)向けスクリプト例

ファイルを開く

ファイルメニューの「ファイルを開く」でテキストファイルを指定し、出力したスクリプト(ファイル名の最初がMで始まる)を読み込みます。

SetDirectoryを適宜編集

ノートブックが開くので、「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)オプションの「効果音」は、ゲーム中にオンとオフの切替ができます。「ヒント」は、ゲーム中に切り替えても実施中のゲームでは有効にならず、次のゲームから有効になります。