古事連記帖

趣味のこと、技術的なこと、適当につらつら書きます。

Windows 10 IoT と GPS センサーを使って電子工作した

前回に引き続き位置情報関連ネタです。

位置情報共有サービス「Locapos (ろけぽす)」を使った Windows 10 クライアントアプリ「Mikaboshi (みかぼし)」をリリースしたことは前回も同様ご紹介したとおりです。
ayano.hateblo.jp

id:tmyt が作った Locapos に対応する何か新しいものを作ろうということで、自動車の盗難時などの位置追跡ができないかやってみることにしました。


記事が長いので折りたたんでおきます…

続きを読む

UWP で XamlReader.Load すると例外で死ぬ罠とその解決策について

割と罠だったので記事書きました


以前このブログでも紹介した拙作「Mikaboshi (みかぼし)」では、リソースとして都道府県道・国道・高速道路の標識データを XAML ファイルで保持しています。
ayano.hateblo.jp

f:id:ChiiAyano:20170802230852p:plain
赤く囲ったものがそれです。

今もちょくちょく更新していますが、最近何らかのタイミングでデバッグ実行で位置情報テストしていると、AccessViolationException の例外が発生してしまうようになりました。
それが上記の XAML ファイルを読むときに使用している System.Windows.Markup.XamlReader.Load メソッドでした。
XamlReader クラス (System.Windows.Markup)
ちなみにこのメソッドは、string として保持している XAML のデータをパースして、オブジェクトとしてインスタンス生成するというものです。割と便利。


例外が発生するコードの最小構成はこんな感じ。これだけでも例外が発生します。
gist.github.com
f:id:ChiiAyano:20170802232356p:plain


このコードに含まれる string で持っている XAML のデータ、xmlns 名前空間エイリアスをつけていますが、これが悪さしているのかなあと思って消したところ、見事に例外が出なくなりました
つまりこういうことです
gist.github.com


なんでこうなるのか、これまでこれで OK だったのに、なぜ今になってダメになったのか、ちょっと解明できてないですが、
なんとなく思うのは、既に親になる MainPage.xaml には同じ xmlns 名前空間が宣言されていて、エイリアスをつけて重複状態になるのでダメで、それが今になって厳密化された…のかなあと雑に考えています。
誰かわかる人いたら教えて下さい…。

GPD Pocket が届きました

Indiegogo で GPD Pocket に出資してましたが、先日ようやく届きました。 Backer ID は 2000 番台はじめくらい。

箱のこだわりがすごくて、マグネットでフタをパタンと閉められる機構が面白いです。
ちっちゃくて雑に持ち歩いてもすぐ使える感じがとても良いです。


どうせ壊しても良いと思って、雑に OOBE 直後に Insider Preview Fast Ring にして Insider Build 入れようとしたんですが、 0x0000009e で BSOD 出まくるという自体になりつつも、一度にインストールするパッケージを減らして最終的に Insider Build だけにしたところ、かなり時間掛かりましたがインストールすることができました。
OneDrive の OnDemand 機能が使いたいという名目でもあります*1

ポインティングデバイスのいわゆる「青乳首」はちょっと使いづらかったので、 id:tmyt からいわゆる「赤乳首」をもらって装着しました。
f:id:ChiiAyano:20170730113927j:plain

初期ロットで起きていたふたを閉めてもスリープしない問題は起きてないように見えます。
ストレージはサムスンの DJNB4R でした。

まだそこまで触っていないのでレビューもあまりできてないんですが、マウスクリックのキーは電源ボタンと同じくクリック感あるキーにしてほしかったなあと思ってます。キーを押してるのにクリックした扱いになってないときがあるのがちょっと気になってます。
特殊なキー配列は慣れだと思ってるので特にとやかく言うつもりはないです。JIS キーボード慣れしてると記号類を探すのに時間が掛かるかな…という感じ。US 配列のカスタム版みたいな気持ちで使うつもりです。
画面サイズの割にかなりの高解像度 (1920x1200) で、ドットバイドットにするとかなり細かくなります。最初はドットバイドットでいいかなと思ってたんですが、ポインティングデバイスの移動範囲とか、じっと見ることを考えると 125% で拡大することにしました。それでも細かいですが…。
3G 通信ができればよかったんですが、それは Indiegogo のコメント欄で「難しい」というのも見ているので、次のモデルが出るときはそのときに載っていればいいかもねの気持ちです。



現状では使い勝手の良さそうなサブマシンとして、外で処理の重いことはしないときには持ち歩いて使いたい、そんな PC だと感じています。
Amazon でも販売が始まったみたいなので、興味がある方はぜひどうでしょう?

保護シートはこれ買いました。貼るのは今度。
付属の保護シートは残念ながら不良品を当ててしまい、両面ともに 粘着面がない という残念仕様で、貼ってもギラギラするので結局剥がしました…。

ケースは純正じゃなくて汎用品を買いました。これもまだ届いてないですが、使えると聞いてるので大丈夫かなと。

サンワサプライ タブレットスリップインケース PDA-TABS7

サンワサプライ タブレットスリップインケース PDA-TABS7

*1:Fall Creators Update で対応のため、現状は Insider Build が必要

Surface Dial を買いました


見た感じ、ハンバーグレストランみたいなところにあるペレットのような雰囲気があります。触っても熱くはありません。
Surface と名が付いていますが、別に Surface でなくても使えます。画面に置いて使うことはできませんが…。


最初使い方がわからず、本体をなでたりしてました。
押し込んだり、つまんで回したりするのが正解のようです。

設定は設定アプリでできます。
f:id:ChiiAyano:20170626222909p:plain

アプリ毎にカスタマイズも可能で、基本的にはキーボードショートカットとして動作するようです。
f:id:ChiiAyano:20170626223144p:plain
実際に使う時は、Dial を押し込んでホールドするとウィンドウの中央にコマンド選択がでてきますので、Dial をまわして選び、押し込んで確定します。
f:id:ChiiAyano:20170626223301p:plain

これで回せば、カスタマイズした動作もサックサクです。



実際使ってみて、なかなか便利だなと感じますが、通常利用だとマウスで事足りてしまい、なかなか使う場面が出てこないのが残念なところ。
Dial だからこそできる機能みたいなのが、現状イラスト系を中心に強く、その分野で利用するにはかなり有用だろうなというのは感じます。
ブラウジングなどではマウスの方が早くて楽です。タブ切り替えに押し込んでホールドして決定して…ってやるくらいならマウスで目的のタブクリックしますし。
それに物理性質上、連続した動作しかできないこともあり、現状はホイールの補助として利用する程度にとどまっています。


何かこう、Dial で遊びたいですね。なんかないかな…


Windows 10 Mobile の未来とは

おことわり: すべて憶測に基づく雑な記事です。参考にしたものはなく、僕が普段 Windows 10 Mobile 端末を使っていて思ったことなどから導き出した話です。ただのたわごと・ポエムだと思って雑に見てください。



土曜日はさわやかに、日曜日は Foursquare Meetup に参加していて気付いてませんでしたが、土曜日に新しい Insider Preview が発表されてから、W10M クラスタがちょっとだけザワザワしてるのを月曜に知りました。

blogs.windows.com

例えばおでさんが記事にするくらいに気にされてるところが、今後の Insider Preview 対応の端末についてです。

・ HP Elite x3
・ Microsoft Lumia 550
・ Microsoft Lumia 640/640XL
・ Microsoft Lumia 650
・ Microsoft Lumia 950/950 XL
・ Alcatel IDOL 4S
・ Alcatel OneTouch Fierce XL
・ SoftBank 503LV
・ VAIO Phone Biz
・ MouseComputer MADOSMA Q601
・ Trinity NuAns NEO

日本で発売されている、ドスパラの Diginnos Mobile DG-W10M や、ヤマダ電機の EveryPhone に、FREETEL の…なんでしたっけ。といった、2016 年に相次いで登場した電話たちは非対応となりました。

Creators Updateの配信端末は限定されるようですod10z.wordpress.com


また、pnp0a03 さんが Windows 10 Mobile に対して悲観的な記事を書いています。

ddlgjp.blogspot.jp


これらを勘案して、僕が思う Windows 10 Mobile の未来を考えてみます。

Windows 10 MobileWindows 10 ARM 版に統合される

…というのは、Windows まわりを追っている人にとってはわかりきった未来かなと思うところです。2016 年 12 月には正式に ARM 版の Windows 10 OS が発表になっています。

pc.watch.impress.co.jp

ARM 版 Windows 10 は、Windows 8 のころ登場した Windows RT ができなかった、ARM で x86 のアプリ (特に Win32 アプリ) が動作するとあって、「真の Windows スマートフォンになるのでは」と期待を込めた記事もありました。

www.itmedia.co.jp

この点から、ARM 版の Windows 10 に Windows 10 Mobile は統合されるものだと強く思っています。ARM の上で Win32 アプリが動作できるようになると、今後 Win32 アプリが動かない Windows OS すなわち Windows 10 Mobile はただただ不利なだけのものになってしまいます。
これで、電話もできて、これまでの Win32 アプリも動く、今までになかった新しい価値のスマートフォンとして今後展開されていくものだと思っています。


ただひとつ懸念もあります。

Windows 10 を搭載したスマートフォンは日本で登場しなくなるのではないか

ARM 版 Windows 10 が出ることにより、Atom 搭載で動いていた Windows タブレットが ARM 版 OS に切り替わっていく可能性もあります。最初はタブレットスマートフォン両方が出るかもしれませんが、スマートフォン上で Win32 アプリを動かすのが難しいまたは Continuum でないとダメなどの制約があると、徐々にタブレットにシフトし、スマートフォンは発売されなくなるという未来も考えられます。
この点をおでさんはかなり気にしているような気がします。


僕も気にしてます。

この点は、今後の UWP の普及次第かなというところもあります。
UWP であれば、スマートフォン版・PC 版など分け隔てなく、その端末の画面サイズに応じた UI を、ひとつのバイナリで提供できますし開発者にとっては UI にさえ注意すれば開発は容易なはずです*1。したがって、UWP で作られたアプリが普及すれば、普段は UWP アプリで事を済ませ、どうしてもだめなときは Continuum などで接続し Win32 アプリを立ち上げる…といった流れになったりで、ポケットサイズの端末の優位性は格段に上がります。
ただ現状を考えると、Win32 アプリの優位な状況は変わらず、このままなら上記のような未来は避けられないかな…なんて思ったりしています。
この辺は米国 Microsoft もそうですが、MSKK仕事しろといった感じ。UWP での開発のしやすさ向上、UWP の安定性向上と、UWP を開発するメリットをもっと高めてほしいです。

*1:実際僕自身が開発してるときも、UI だけ気にすれば簡単に実装出来ました

Microsoft Flow で遊んでみたはなし

今更ながら、Microsoft Flow で遊んでみました。

flow.microsoft.com

要するに IFTTT を業務向けにしました的な。IFTTT 使ったことがないので形容が間違えているかもしれませんが、そんな感じだと認識してます。


業務向けを意識すると、Microsoft は日本語化に力を入れるんだなっていうのがわかるくらい、日本語化がしっかりしています。
もちろん個人でも使うことはできます。無料で使うことができて、15 分に 1 回発動できるかの自動チェックが走り、月 750 回まで実行することができます。
有料だともうちょっとチェック間隔は短く、実行回数も増えます。意外とお安いので気に入ったらお金払ってもいいかなあなんて思ってます。

基本的な登録の仕方や、Flow の作り方は id:kazuakix が書いてましたので紹介します。およそ1年前で、まだベータ的な感じの頃のですが、基本的なところは今も変わっていません。

blog.kazuakix.jp

ちなみに、無料のみ利用可能となりますが、Microsoft アカウントでも登録ができるようになっています。必要に応じて企業アカウント (Azure AD) を取ると、有料プランへの移行もできるようになります。
Azure AD 自体は無料で、僕の場合は Windows デベロッパーセンターで Azure AD を新規作成できる場所があったので、そこで作りました。Azure ポータルでも作れるかと思いますが、ごめんなさい、その辺まで調べ切れていないです。
デベロッパーセンターで Azure AD を作る方法は以前記事で書いていました。

ayano.hateblo.jp


今回やったことはひとつ。
JR東日本アイステイションズが提供している「鉄道運行情報」のメールを、Slack に転送する機能を作ってみました。

www.jikokuhyo.co.jp

Flow のいいところは、Outlook.com に対応しているところ。Outlook.com のメールを扱うサービスがあまりないので、この点はとてもありがたいです。
IFTTT だと Gmail には対応していますが、Outlook.com には対応していませんでした。

id:kazuakix の記事ではテンプレートを利用していましたが、今回は一から作ります。
f:id:ChiiAyano:20170407232731p:plain
f:id:ChiiAyano:20170407232939p:plain

Outlook.com を選んで、はじめて使うときはどのアカウントを使うか、ログインを求められるので、指示通りログインを進めて下さい。
登録できると、どんな条件で発動するかを設定できます。「開始」に差出人のアドレスを入れれば、特定のアドレスにだけ反応することができます。
f:id:ChiiAyano:20170407232945p:plain

次に Slack を追加します。
f:id:ChiiAyano:20170407233003p:plain

このときも、どのチームで使うかを聞いてきますので、設定しログインして下さい。
登録できると、どこにどうやって送信するかを設定できます。「メッセージテキスト」にメール本文、「ボット名」に件名を入れることで、簡易的なメール確認にも使えたりします。
f:id:ChiiAyano:20170407233139p:plain

これでひとまずはできあがり…ですが、メール本文は余計な文があったりして、必要な情報だけほしいと思ったとき、Flow の機能だけではうまくできませんでした。
そこで、半ば仕方なくですが Web API を作って一度そちらを経由し、メール本文を加工して使えるようにしました。

Visual StudioASP.NET Web アプリケーションを選んで…
f:id:ChiiAyano:20170407233911p:plain
今回は Azure API App を選びました
f:id:ChiiAyano:20170407233936p:plain
Azure API App は Swagger と呼ばれるフレームワークを積んだテンプレートになっています。Swagger はとりあえず作るにはかなり簡単なフレームワークで、サーバー初心者でも扱いやすかったです*1

今回はこのドキュメントを参考にしました
Azure App Service で API Apps、ASP.NET、Swagger を使用する

できあがったプロジェクトの Controllers に、受け口となる実装をしていきます。既に「ValuesController」がありますので、それを見ながら作っていくと楽かと思います。
こんな感じでコントローラーを書いてみました。

using System;
using System.Net;
using System.Web.Http;
using Swashbuckle.Swagger.Annotations;
using WebApplication2.Models;

namespace WebApplication2.Controllers
{
    public class HogeController : ApiController
    {
        [SwaggerResponse(HttpStatusCode.OK)]
        public HogeResponseModel Post(HogeRequestModel request)
        {
            var body = request.Body;
            var response = new HogeResponseModel();

            // なんか処理
            response.CreatedAt = DateTimeOffset.Now;
            response.Message = body;

            return response;
        }
    }
}

リクエストを受けるためのモデルとなるクラスはこんな感じ。これを Models の中に入れます。

namespace WebApplication2.Models
{
    public class HogeRequestModel
    {
        public string Body { get; set; }
    }
}

レスポンスを渡すためのモデルとなるクラスも同様に Models に入れます。

using System;

namespace WebApplication2.Models
{
    public class HogeResponseModel
    {
        public DateTimeOffset CreatedAt { get; set; }
        public string Message { get; set; }
    }
}

実際、これだけだとただ左から来たものを右へ受け流すだけの API になっていますが、実際はもうちょっといろいろ書いてます。

これで作れましたが、実際に動くかどうかも Swagger では試すことができます。
App_Start にある「SwaggerConfig」を開き、190 行目ほどにある

/*
    })
.EnableSwaggerUi(c =>
    {
*/

のコメントを外してあげると、ダッシュボードにアクセスできるようになります。
ひとまずデバッグ実行して、Web ブラウザーが立ちあがったら、そのアドレスに「/swagger」を足して下さい。

http://localhost:59819/swagger

とやると、ダッシュボードが立ちあがります。ここで、どんなエンドポイントで、どういうメッセージを送れば、どう返ってくるかがわかります。
f:id:ChiiAyano:20170408000051p:plain
試しに適当な JSON を流し込んでやると、ちゃんとレスポンスが作られることがわかると思います。
f:id:ChiiAyano:20170408000239p:plain

これでできあがりです。あとは Azure に投げるなり、自前のサーバーなどに置いてインターネットアクセスができる環境において下さい。
今回認証などのアクセス制限まわりに触れていませんが、おそらく必要になるケースは出てくると思います。その辺はまた時間があれば書きたいところ。


さて Flow に戻ります。
先ほど作ったフローに、今公開した API を使ってもらうようにします。
メールと Slack の矢印あたりをポイントすると「+」が表示されるので、それをクリックすると間に処理を追加することができます。
f:id:ChiiAyano:20170408000726p:plain

アクションは今回「HTTP」を選びました。Swagger が使えそうなアクションがありますが、HTTPS 通信でないとダメだったりしたので、地道に HTTP で作ります。

設定はこんな感じ。「本文」は JSON チックにし、メール本文の間にダブルクオーテーションを挟むのがポイントです。
f:id:ChiiAyano:20170408001108p:plain

次に JSON を解析します。Flow では JSON 解析するアクションがあるので、それを利用します。
「HTTP」の下の「+」をクリックして処理を追加します。

f:id:ChiiAyano:20170408001519p:plain
コンテンツは HTTP で受けた「本文」を入れて下さい。
スキーマはちょっと特殊ですが、こんな感じで書けると思います。

{
  "type": "object",
  "properties": {
    "CreatedAt": {
      "type": "string"
    },
    "Message": {
      "type": "string"
    }
  }
}

これで Web API を通してメッセージの加工ができるようになりました。

最後に Slack に投稿する設定を変更します。
パースした JSON の情報が使えるようになったので、それを「メッセージテキスト」に流し込みます。
f:id:ChiiAyano:20170408005424p:plain

これで以上です。

いろいろ設定して、実際に使うとこんな感じで動かしています。
f:id:ChiiAyano:20170408005547p:plain


Flow はモバイルでも動かすことができます。
これまでなぜか iOSAndroid のみアプリが提供されていましたが、つい先日 Windows 10 Mobile でもリリースされました。
www.microsoft.com
Flow のアクションを促すことができるボタンを用意して、モバイル端末から実行することができたり、既存のフローを編集したりすることができます。
f:id:ChiiAyano:20170408010242p:plain

で、試しにやってみたのですが…

リプライ飛ばしたはずなのに @ がついてない…だと…。

どうやらスパム防止としてあえて @ をフィルターしているようでした。
powerusers.microsoft.com
正しいっちゃ正しい。仕方ないですね。


そんなわけで長々と書いてしまいましたが、こんな感じで遊んでます。
他にも面白そうな遊び方があったら紹介したいです。


参考記事
blog.daruyanagi.jp

*1:個人の感想です

Windows 10 Insider Preview の Outlook メールで新着通知が表示されなくなったら

もうすぐ Creators Update がきますね
ここまでくる間に、Outlook メールも更新が何度かおこなわれました。で、気づくと PC と Mobile 共に新着メールの通知がこなくなっていました。Outlook メールの設定も、システムの設定も確認してみましたがすべてオンになっていて、オンとオフを繰り返してみたものの、全然通知がきませんでした。

Mobile のフィードバック Hubにはひとまず報告はしてありました。
Feedback Hub - Windows Insider Program


その後何度か OS のアップデートや Outlook メールのアップデートがきていましたが、一向に直る気配がなかったのですが、今になって解決方法を見つけました。


アカウントの設定をし直すと通知がきました


なんとあっさりでした。今までなぜ試さなかったのか…。
PC も Mobile も同じようにアカウントの設定をやり直すだけで通知が復活します。


お試しあれ。