tonkunの備忘録

色々調べた事、試した事などを載せます

IISで証明書要求の完了後にサーバ証明書の表示が消える

案件で使用しているドメインSSL証明書の再発行のお願いが来ていたので作業した所、
いつも通りにIISマネージャーの「証明書の要求の完了」から
新しい証明書ファイルを取り込むと、一見取り込まれたように見えますが、再度表示すると消えていると言う事象になりました。

mmcのコンソールから「証明書」を追加して登録した証明書を見てみると
何やら他とアイコンがちょっと違う・・・ f:id:tonkun_no:20180830212043p:plain

これまでの証明書

f:id:tonkun_no:20180830212356p:plain

今回取り込んだ証明書

f:id:tonkun_no:20180830212515p:plain

「この証明書に対応する秘密キーを持っています。」が無い・・・(´・ω・)

調べたところ、以下のコマンドで秘密キーが設定できるらしい

certutil -repairstore my "シリアル番号"

シリアル番号は証明書の詳細タブから確認可能でした。

f:id:tonkun_no:20180830214544p:plain

これで証明書に対して
「この証明書に対応する秘密キーを持っています。」も表示され
IISマネージャーのサーバー証明書にも表示されるようになりました。

何回かサーバー証明書の更新はしてきたのですが、
初の事象だったのでかなりハマりました。

ジオトラストさん、もうちょっとインストールの手順とかよくあるお問い合わせを新しくして欲しいなぁ。

Windows7とWindows8.1からPoint to Site VPNでAzureに接続出来なくなった(Error 812)

Windows7Windows8.1のPCからAzureのVPNに接続が出来なくなりました。
Windows10からは問題なく接続できます。

ちょっと調べてみると

ポイント対サイト VPN の TLS に関するアナウンス – Japan Azure IaaS Support Blog

該当ユーザにはお知らせがメールで来ているらしいんだけど、
探しても該当のメールなし・・・( 一一)

ともかく更新プログラムを当ててレジストリを変更すればOKらしい。

自分の環境では1つインストール済みでもう1つは適用できませんでした。(何故だろう)

レジストリの変更は

https://support.microsoft.com/ja-jp/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-a-default-secure-protocols-in

のサイトにある 簡単な解決策からやってみましたが・・・。

f:id:tonkun_no:20180816205732p:plain

ダメでした( 一一)

途方に暮れていた所、Azureの管理ポータルから「新しいサポート要求」→「問題」で 入力してみると・・・。

f:id:tonkun_no:20180816210147p:plain

何かそれっぽいの出てきた( ゚Д゚)

f:id:tonkun_no:20180816210355p:plain

更新プログラムについては上記のAzureのBlogに書かれていた内容と同じでしたが、
レジストリの更新内容が更新プログラムのサイトと少し違う模様。

reg add HKLM\SYSTEM\CurrentControlSet\Services\RasMan\PPP\EAP\13 /v TlsVersion /t REG_DWORD /d 0xfc0  
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD /d 0xaa0  
if %PROCESSOR_ARCHITECTURE% EQU AMD64 reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD /d 0xaa0  

結果から言うとこれがビンゴでした。

私の環境はAMD64とは無関係なので、上の2つのみ適用しましたが、
Windows7環境もWindows8.1環境も無事Azureに接続出来ました。

めっちゃ焦った(´・ω・)

「Windows10 1803でClickonceを使ったアプリが起動しない」の回避方法

Windows10を1803にしたタイミングでClickonceを使ったアプリを新規インストールまたは更新した場合に アプリが起動されなくなっていました。

起動しようとするといつも通り
f:id:tonkun_no:20180531200710p:plain
このダイアログは出るけど、何時までたってもアプリが起動してきません。

調べてみるとSmartscreenの不具合の模様

Smartscreen prompt does not show for ClickOnce app since Windows 10 Update 1803

回避方法としては

  1. Smartscreenを無効にする
    f:id:tonkun_no:20180531202331p:plain →きちんとウイルス対策ソフトを入れていれば問題なさそうだけど、お客さんによっては何となく嫌がられそう

  2. Clickonceのインストール先のアプリのexeを直接起動する
    f:id:tonkun_no:20180531203248p:plain →インストール先のフォルダ(C:\ユーザ\ユーザー名\AppData\Local\Apps\2.0\xxxxxxx)をお客さんに探してもらうのがかなり大変&アプリの更新の度にやる必要があるらしいので結構厳しい

  3. IEの信頼済みサイトにClickonceのサイトを登録する
    f:id:tonkun_no:20180531201912p:plain
    →一度設定しておけば以降も有効なので、今回はこれが一番良さそうな気がする
    ClickonceのサイトのURL(xxxxxxxxx.jpやローカルサイトならIPアドレス(192.168.1.100))を登録するだけ
    ただし、アプリの更新または新規インストール前に設定しておく必要がある。 起動しない状態になってから設定してもダメみたいです

最近Windows10の更新で結構クリティカルな問題に当たるなぁ( 一一)

「Windows10でDataGridViewに2文字入力されちゃう」が直っているようで直っていなかった

バリバリWindows Formを使っているので、昨年から以下の事象に悩まされていました。

Fall Creators Update を適用後 DataGridView に文字を入力すると 2 文字入力される – JAPAN Platform SDK(Windows SDK) Support Team Blog

Windows 10 April 2018 Update(バージョン 1803)がいつの間にか開発環境に入ってしまったので、ついでに直っているか確認してみました。

f:id:tonkun_no:20180521194650p:plain

2文字入力は直っていて一見問題無さそうに見えたのですが、どうも実際に開発しているアプリだと挙動がおかしく 「さ」が「sあ」になる場合が出てきています。(母音以外がおかしい)

アプリ側ではフォーカスしている列によってIMEを切り替えているので、
以下のテストプログラムで試してみました。

        public Form1()
        {
            InitializeComponent();
            this.dataGridView1.CellEnter += dataGridView1_CellEnter;
        }

        private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            switch (e.ColumnIndex)
            {
                case 0:
                    this.dataGridView1.ImeMode = ImeMode.Hiragana;
                    break;
                default:
                    this.dataGridView1.ImeMode = ImeMode.Off;
                    break;
            }
        }

実行してみると、起動直後に入力した場合に入力がおかしくなっています。

f:id:tonkun_no:20180521195613p:plain

この場合は、次の行とかは問題無さそうです。(実際の業務アプリの方は次の行でも問題になっているので、何か条件があるのかもしれません)

現時点ではもの凄いダサい回避方法でお茶を濁しています。orz

        private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            switch (e.ColumnIndex)
            {
                case 0:
                    this.dataGridView1.ImeMode = ImeMode.Hiragana;
                    this.dataGridView1.BeginEdit(false);    // add
                    this.dataGridView1.EndEdit();           // add
                    break;
                default:
                    this.dataGridView1.ImeMode = ImeMode.Off;
                    break;
            }
        }

Microsoftさんもうちょっときちんと直して。お願いします(´・ω・)

Xamarin.Forms Cognitive Services Face APIのデモアプリを作ってみた

Cognitive ServicesのFace APIを使った顔認識のデモを作りました。

アプリ作成にあたり、かずきさんの以下の記事を参考にさせて頂きました。
ありがとうございます(*‘▽’)

blog.okazuki.jp

FACE APIの準備

以下の記事を参考に準備をします。

tonkun-no.hatenablog.com

注意事項

ひょっとすると無料プランだと「20 Calls per minutes」に引っ掛かるかもしれません。
私はいろいろ試しているうちに無料プランが何やらExpireしたのでStandardにプランを変えました。 まぁそれでも1000 Callsで150円位かと。

使用するAPI一覧

以下のAPI一覧の中から必要なものを使っています。

Microsoft Cognitive Services

機能としては以下を使用しています。

  • 人情報の一覧取得(List Persons in a Person Group)

  • 人情報の登録(Create a Person)

  • 人情報の削除(Delete a Person)

  • 人情報への顔の登録(Add a Person Face)

  • 学習(Train Person Group)

  • 顔の検出(Detect)

  • 顔の識別(Identify)

Personを作る前にPerson Groupの作成が必要ですが、本アプリではそこは省略しています。
予め以下のURLなどから作成しておく必要があります。

https://westus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395244/console

アプリの画面構成

アプリの画面構成は以下になります。

  • メイン画面

  • 人の一覧画面

  • 人への顔の登録画面

  • 顔認識のデモ画面

になります。

アプリの概要

  1. 人の一覧画面には現在登録されている人の一覧が表示され、人の追加・削除が可能
    ここから人を選択して顔の登録画面へ遷移する

  2. 顔の登録画面で撮った写真を登録し学習させる

  3. デモ画面で写真を撮影すると、顔の識別を行い登録データと同一の人がいれば、登録名が表示される
    信頼度や、おまけで年齢と笑顔値も表示

実装

GitHubにソースをあげてあります。

github.com

Xamarin Forms + Prismで作成しています。

MVVMでやった事がなかったので挑戦してみましたが、ViewとViewModelのみです(・ω・`) どの部分がMになるのかピンと来ませんでした。精進します。

カメラ部分はPluginにお任せです。

github.com

大事な処理はSDKやPlugin任せです。
意外と簡単にサクッと動作する所まで作る事が出来ました。 ※どちらかと言うと画面のレイアウトとか別な部分で悩みました・・・orz

実際の製品や受託開発となると、また違うとは思いますが、こういったデモレベルであればサクッと作れるは良いですね。

実行

人を登録して、写真を撮影して顔の登録も行った後で、
デモ画面から写真を撮影すると、撮影した人が登録されていれば名前や年齢が表示されます。

f:id:tonkun_no:20170602042335p:plain

顔の角度によっては顔として認識しなかったりしますが、結構良い精度で認識できていると思います。

次に試すのはFaceAPI以外にしてみたいなと思います。(・ω・)ノ

Xamarin.Forms Forms Previewerがいつの間にか動いてた(Windows単独)

以下の記事からだいぶ経ってしまいましたが、

tonkun-no.hatenablog.com

Visual Studio 2017も出たしそろそろできるだろうと試してみたら、いつの間にかWindows単独でもPreviewerが動いていました。

試した時点の環境がVisual Studio 2015とVisual Studio 2017混在環境なので、他環境での検証はできていません。(大丈夫だと思いますが・・・)

取りあえずVisual Studio2015でプロジェクトを新規作成して

f:id:tonkun_no:20170321013145p:plain

f:id:tonkun_no:20170321013243p:plain

ソリューションをビルドして、
[表示]→[その他のウィンドウ]→[Forms Previewer]を選択 f:id:tonkun_no:20170321013533p:plain

エラーで表示されませんでした。
エラーメッセージを見ると64ビット版のJDK1.8以上を入れて下さいとのこと
(以前はここまで具体的なエラーメッセージは出てなかったですね)

f:id:tonkun_no:20170321013634p:plain

何故64ビット版じゃないとダメなのかはわかりませんが、
早速Oracleのサイトからダウンロード&インストール

Java SE Development Kit 8 - Downloads

f:id:tonkun_no:20170321013939p:plain

インストールが完了したらVisual Studio
[ツール]→[オプション]からオプション画面を表示して、
[Xamarin]→[Android Settings]から[Java Development Kitの位置情報]を64bit版のJDKの場所に変更して

f:id:tonkun_no:20170321014330p:plain

再度Previewerを表示すると

f:id:tonkun_no:20170321014551p:plain

ようやくプレビュー画面を拝むことが出来ました。

f:id:tonkun_no:20170321015007p:plain

複雑なレイアウトのものは試していませんので、実用的なレイアウトだとほぼ使えないとかありそうですが、 実行せずにレイアウトを確認できるのはいいですね(・ω・)ノ

TimeSpan型で24時間以上の値を設定する

TimeSpan型に24時間以上の値を設定できないと思い込んでいましたが、

TimeSpan.Parse("20:30:00");                   // これはいける
TimeSpan.Parse("40:30:00");                   // これは例外(OverflowException)
TimeSpan time = new TimeSpan(40, 30, 0);      // これはいける
Console.WriteLine(time.ToString());           // 1.16:30:00が出力される

知りませんでした・・・orz