完全にこのタイトルを書きたかっただけです。IoT向けのUWPアプリをサクサク書いてみようという話をします。https://developer.xamarin.com/guides/cross-platform/xamarin-forms/windows/getting-started/universal/)。2015上からXamarinプロジェクトを作成して手順に従います。Core上でXamarin.Forms利用プロジェクトを最低限動作させるまではとても簡単です。適当にUWPプロジェクトを生やしてXamarin.Formsをパッケージ追加し、メインのXamarinプロジェクト(PCLのもの)への参照も追加し、あとはチュートリアルどおりにいくつか.xamlファイルなどへ変更を加えるだけです。RPi2+Win10IoTCoreこのスクリーンショットでは少々フォントサイズをいじって見やすく(図3)していますが、ともかく普通に動作します。VS上でXAMLを開いたところこのUIはキーボードやマウスを利用して操作できます。ボタンやラベルといったXamarin.Formsが提供する各種UIコンポーネントを利用できますし、データバインディングを活用したプログラミングも可能です。Coreと組み合わせることの厳しさは明らかです。Coreはその名前のとおりIoTを中心とした組み込み向け(そのなかでも、とりわけ簡易的なユーザインタラクションを伴うのがせいぜいというエリア)のOSです。このため、ユーザとのインタラクションに関する厳密な規定を持ちません。タッチスクリーンインタフェースの存在を前提とすることもできません。Coreの間で垣根なく動作するといっても、用途の根幹が違うものを混ぜるのは基本的に悪手です。Coreの用途自体がもう少しタッチスクリーンUIへと寄っていく*1ようなイベントが発生すればXamarin.Formsを活用できる場面が増えそうですが、それまでの間は残念ながらiOS/Android向けにXamarin.Formsベースで構築した(さほどビューをゴリゴリ作りこんでいない)ものを大画面でのサイネージ表示用へと安価に転用するという、わりとありがちなシナリオが現実的と考えられます。この場合、用途としては50-80インチ程度のディスプレイとタッチパネルモジュールとの組み合わせを前提とするサイネージで、インタラクションはさほど発生させない前提(メインメニューからの階層をタップでたどっていく程度)がしっくりきます。商業施設内の簡易案内用システムなどで見かけるエリアですね。サイネージから手元スマフォでのアプリ利用へと誘導できるような仕掛けになっていれば一定回りそうではあります。$20程度の安価なタッチパネル付きディスプレイモジュールがデファクト・スタンダードとして普及すればこれはあり得ます。現状の7"ディスプレイ単体で$50近くかかる状況では無理そうですね。Coreはとても良い組み合わせです。ハードウェアの持つ力を十分に発揮しうる組み合わせといえます。そこにXamarinを足してそこから一旦GUIでのインタラクションを引いてみようと考えてみます。ええと、UWP環境には元々C#コードの十分な実行環境が整っています。Xamarinの中ではメインのx-platコード実行基盤及び大半のBCLの出番がありません。Cloudあたりが絡めそうなポイントです。Cloudはさておき、GUIインタラクションを差し引くとFormsコンポーネントを追い出すことになります。結果、Xamarinらしいポイントは一切残らないということになってしまいます。なんだか悲しいですね。思っているうちになんとなく「Xamarin.IoT」というフレーズを思いつきました。なんかかっこいいですね。Xamarin.IoTがどういうものであってほしいかを想像して書いてみることにしました。Xamarin.IoTを想像してみるXamarinシリーズということは、きっとXamarin.IoTというのは「C#やF#といった言語で開発できてサーバとも連携させやすい、クロスプラットフォーム(x-plat)IoT開発をめっちゃ楽にしてくれるなにものか」でしょう*2。APIs」と「必要ならば自らそのサービスプロバイダを書いて拡張できる仕組み」となってほしいところです。APIsというのは次のような感じでしょうか。猫も杓子もBLE時代まあ普通に需要ありそう、というかXamarinの追加コンポーネントとして既に売っているところある気がするx-platなGPIO基盤え、それSystem.IO.Ports.SerialPortじゃダメなの?→どっちかというとGpioClx系ではシリアルポート抽象化は何かと嬉しい。Beamのようなインテリジェントなゲートウェイを介するデータフロー作りとか、そういう方面でしょうか。Xamarin.IoTを構成する要素のすべてでフルバージョンの.NETランタイムが動作する必要はないはずです。センサー値を定期的に取得して蓄積し、加工したうえで上位端末へ送信する役目を担う末端の端末*3ではごく限られたサイズのメインプログラムを動作させるためにminimalなランタイムとFull-AOTコードを突っ込むことになるのではないでしょうか。2016」みたいな話になりました。あれ、なんだかWCFの雰囲気を感じますね。KBメモリ的環境を想定しています。CoreにXamarin.Formsを持ち込んでも(今のところ)個人利用で嬉しいケースは少ないという話と、Xamarin.IoTという語感からその用途やあり方を想像してみると割と面白い気がしたという話でした。明日の担当はMasaakiYoshidaさんです。MacBookを4/10に注文、4/14出荷、届いたのは4/17だったので正確にはもうすぐ2ヶ月ですが。Dockerで簡単にGPU対応のTensorFlow入りコンテナを作る方法こんにちは。作品群を読んでいたら連休が終わりそうです。重くなるので読み込まないようにすればOK。資料を補足するシリーズです。途中でやったことや、参考情報を書いていきます。