Xamarin.Forms Forms Previewerがいつの間にか動いてた(Windows単独)
以下の記事からだいぶ経ってしまいましたが、
Visual Studio 2017も出たしそろそろできるだろうと試してみたら、いつの間にかWindows単独でもPreviewerが動いていました。
試した時点の環境がVisual Studio 2015とVisual Studio 2017混在環境なので、他環境での検証はできていません。(大丈夫だと思いますが・・・)
取りあえずVisual Studio2015でプロジェクトを新規作成して
ソリューションをビルドして、
[表示]→[その他のウィンドウ]→[Forms Previewer]を選択
エラーで表示されませんでした。
エラーメッセージを見ると64ビット版のJDK1.8以上を入れて下さいとのこと
(以前はここまで具体的なエラーメッセージは出てなかったですね)
何故64ビット版じゃないとダメなのかはわかりませんが、
早速Oracleのサイトからダウンロード&インストール
Java SE Development Kit 8 - Downloads
インストールが完了したらVisual Studioの
[ツール]→[オプション]からオプション画面を表示して、
[Xamarin]→[Android Settings]から[Java Development Kitの位置情報]を64bit版のJDKの場所に変更して
再度Previewerを表示すると
ようやくプレビュー画面を拝むことが出来ました。
複雑なレイアウトのものは試していませんので、実用的なレイアウトだとほぼ使えないとかありそうですが、 実行せずにレイアウトを確認できるのはいいですね(・ω・)ノ
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
C#でLINE botを作ってみた
ちょっと現実から逃避していて調べものをしていた時に、サクッと作れたのでご紹介。
LINE側の準備
- LINEビジネスセンターより「Messaging API」を選択 business.line.me
「Developer Trialを始める」を選択
会社・事業者を作成して選択(とりあえず法人で作ってしまったけどいいのかな?)
アカウント名・業種を決めて「確認する」を選択
内容を確認して「申し込む」を選択
「LINE@MANAGER」へを選択
LINE@MANAGERの画面が表示されるので、「Bot設定」の「APIを利用する」をクリック
確認ダイアログで「確認」をクリック
受信したメッセージをこちらで用意するサーバで処理したいのでので「Webhook送信」は「利用する」に変更
応答メッセージをこちらで作成するので「自動応答メッセージ」は「利用しない」に変更
「Botのグループトーク参加」「友だち追加時あいさつ」はお好みで
「Bot設定」の「LINE Developersで設定する」をクリックする
「Channel Secret」の右の「Show」をクリックして、表示される内容をメモっておく(API側で使います)
画面一番下の「Channel Access Token」の右の「ISSUE」をクリックして、表示される内容をメモっておく(API側で使います)
LINEの準備はとりあえずここまで
アプリ側の作業
Messaging API はC#のライブラリが無いのですが、Kenichiro NakamuraさんによりSDKとテンプレートが作成されています。
C# で LINE Bot | Ken’s Tech Blog
基本これを入れるだけでそのまま動く物が出来てしまいます。すごいよ・・・( ゚Д゚)
- LINE Bot Applicationテンプレートをダウンロード
Release Line Bot Application · kenakamu/line-bot-sdk-csharp · GitHub
%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#\ にzipをそのまま保存
Visual Studio 2015起動
新しいプロジェクトの作成画面に「Line Bot Application」が追加されているので、それを選択して作成
Web.configの「ChannelSecret」と「ChannelToken」に先ほどメモった内容を記載
プロジェクトを右クリックして「公開」を選択
「App Servce」画面で既に利用可能なリソースがあるのであればそれを選択、今回は「新規作成」を選択
- Web Appの名前、サブスクリプション、リソース、App Serviceのプラン(無料でOK)を指定して「作成」を選択
- そのまま「発行」を選択
- 発行されたURLをメモっておく
LINE側の設定
もうちょっとです。
- LINEビジネスセンターより「アカウントリスト」を選択
- 編集画面が表示されるので「Webhook URL」に先ほどメモったURLを貼り付けて、プロトコルをhttpsに変更し、URLの後ろに/api/linemessageを付けて「SAVE」をクリックして保存する
※VERIFYはうまくいかないけど無視(笑)
これでOK
動作確認
今使っていた「LINE Developers」設定画面にあるQRコードから、LINEへ友だち追加して実際に動作を確認します。
来た物をそのまま返すサンプルになっています。
Button、Confirm、CasouselのTemplate messageのサンプルも含まれています。
LINEの設定に多少手間取るかもしれませんが、アプリ部分はテンプレートそのままでOKです。 こんな素晴らしいSDKとテンプレートを公開して頂いているKenichiro Nakamuraさんに感謝ですね(・ω・)
Xamarin.Forms XAMLのIntellisenseをとりあえず有効にする方法
Xamarinの開発環境を再構築していたところ 以下の記事で紹介していた拡張機能がなくなっていました・・・(・ω・`)
またエアXAMLに戻ってしまうのは辛いので、 暫定的にIntellisenseを有効にしてみます。
なぜかテキストエディタで開くと、Intellisenseが聞くので、 レジストリを編集して常にテキストエディタで開くようにしてみます。
以下のレジストリを編集します。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0_Config \XmlChooserFactory\XamarinForms
※VisualStudio2015環境の場合です
内容については、この辺りを参考にしました。
Visual Studio Editor Choosing System – Microsoft XML Team's WebLog
設定する値ですが、
{7651A701-06E5-11D1-8EBD-00A0C90F26EA}の値を
{FA3CD31E-987B-443A-9B81-186104E8DAC1}
から
{8B382828-6202-11d1-8870-0000F87579D2}
に変更しています。
設定するテキストエディタのGUIDはこちらを参考にしました。
https://msdn.microsoft.com/ja-jp/library/bb166496.aspx
変更後のレジストリ
めでたくIntellisenseが有効になりました。
今回はコード表示の場合のみ変更しています。
まっさらな環境を持っていないので、今回修正したレジストリが最初からあるのかどうかちょっと不明ですが参考になれば(・ω・)ノ
Xamarin.Android Cognitive Service Face APIを使って顔認証をしてみた
の9日目の記事になります。
前回準備したFace APIを使ったなんちゃってログインのような処理を作ってみようと思います。
処理の流れとしては
カメラのプレビューから顔を検出
プレビューから顔の画像を取得
→どうしてもプレビューから画像の取得が出来なかったので、写真を撮影する方法に変更しています・・・orz取得した画像をFace APIを使用して顔を検出
検出した顔に対してあらかじめ用意した顔リストから類似する顔を検出
検出できたら認証成功
認証に成功したら次の画面に移動
と言った感じです。
プロジェクト構成
Xamarin.Androidで作成します。 プロジェクトの構成としては、以下の通り
AndroidプロジェクトとPCLプロジェクトの2つです。
実装
Face API周りの準備から。
NuGetからMicrosoft.ProjectOxford.FaceをPCLプロジェクトにインストール
実際に顔認証をしている処理としては
FaceServiceClient _faceServiceClient = new FaceServiceClient("your subscription key"); private async Task<SimilarPersistedFace[]> GetSimilarFaces(Stream imageStream) { try { // 顔を検出 var faces = await _faceServiceClient.DetectAsync(imageStream); // 検出した顔がリストにあるか検索(1件のみ抽出) return await _faceServiceClient.FindSimilarAsync(faces.FirstOrDefault().FaceId, _faceListId, candidatesCount); } catch (FaceAPIException) { // 何かしらエラー return new SimilarPersistedFace[0]; } }
と
DetectAsyncをして、撮った画像から顔を検出して、
FindSimilarAsyncでFaceListに同じ顔があるか検索して結果を返しているだけでOK。
超簡単です。
APIの使い方はこちらを参考にしました。
Microsoft Cognitive Services
今回FaceListはあらかじめ作成しています。
同じくAPIが用意されているので、そちらを使えばサクッと作れると思います。*1
カメラ側のでの顔検出はGooglePlayServices.Visionを使います。
以前に書いた記事の機能をベースにしています。
tonkun-no.hatenablog.com
顔を検出したタイミングで写真を撮影して、 そのコールバック処理で、先ほど準備したFace APIを使用して認証を行っています。 成功した場合は次の画面へ移動、失敗した場合はそのままになっています。
ソースはGithubに上がっているので、詳しくはそちらを見てみてください。
実行
実行してみると、カメラのプレビューで顔を検出したタイミングで認証が行われ、
FaceListに登録した顔と似ていると判定されれば、認証成功として次の画面へ移動できました。
カメラの顔検出がかなり早いので、撮影のタイミングによっては認証に失敗したりと、 何だかちょっとイマイチな動作ですが・・・そこはまぁ(・ω・`)
Face APIを使って、こんなに簡単に顔の検出等が出来るのはいいですね。 他のAPIも試してみたいと思います。
*1:CreateFaceListAsyncとAddFaceToFaceListAsyncを使用します
Cognitive Service Face APIを試してみる(準備編)
Microsoft AzureのCognitive Service Face APIを使ってみようと思います。
今回は準備編です。
Face APIの準備
Azureにログイン
Microsoft Azure: クラウド コンピューティング プラットフォームとサービス
ダッシュボードから新規で「Cognitive Services APIs」を検索し、
「作成」をクリック
Account nameを記入し、サブスクリプションを選択、API typeから「Face API」を選択
場所は「米国西部」しか現時点では選べないのでそのまま、Pricing tierは「F0 Free」を選択
Resource groupはとりあえず新規作成で、Legal termsで「I Agree」を選択
ダッシュボードにピン留めするにチェックをして「作成」をクリック
しばし待ちましょう・・・( ゚Д゚)
作成が完了したら、KeysからKEY1をコピーしておきます
Azure側の準備はこれでOKです。
Xamarin.Forms Visual StudioでXAMLファイルの編集をもうちょっと便利にしたい
最近Xamarin.Formsを勉強していますが、 サンプルとかに書いてあるXAMLファイルを手書きしようとすると
イケテるパターン
イケテないパターン
Visual StudioさんIntellisenseが働いてくれないorz
コレジャナイ感が、もっとサクサク書きたいんです・・・
Twitterでつぶやいてみたことろ、
Xamarin formsのXAML編集ってみんな実際どうやってるんだろうbyVisualStudio
— tonkun (@tonkun_no) November 11, 2016
Layout配下なんてIntellisense効かないよね・・・?
頂いた回答としては
などの回答を頂きました。 ReSharperは超便利そうですが、有償なのでちと保留 エアーXAMLの境地に行くにはまだまだ修行(写経)が必要ですので、 拡張機能に何やらそれっぽい物があるそうなので試しに使ってみました。
ポチっと
インストール
1行目の色がこれまでと変わっています。
おぉっ( ゚Д゚)
スバラシイ( ;∀;)
拡張機能を入れても1行目の色が変わらない場合がありました。
一度、対象のXAMLファイルを閉じて、再度開くと直るかもしれません。
これで画面書くのも捗りますね(・ω・)b