tmytのらくがき

個人の日記レベルです

ANAのプレミアムポイントがたまった

f:id:tmyt:20161008104618j:plain

なんとなく今年はちょっと50000PP貯めてみるか…!と思い立ったので、比較的頻繁にANAに乗ったりしてました。9月中頃に急きょインドへ行ったりしたのでそこで50000PPたまってプラチナ事前サービス基準に到達したけど、id:c-mitsuba と沖縄いこーという話をしてたのでエクストラステージ。 ちなみにこんな感じで飛行機にのりました。

日付 便名 From To 運賃 マイル PP
3/11 NH623 HND KOJ プレミアム株主優待 826 1902
3/14 NH630 KOJ HND プレミアム株主優待 826 1902
4/30 NH39 HND ITM 特割C 231 820
5/4 NH40 ITM HND 特割C 231 820
5/16 UA838 NRT SFC エコノミー: Q 3591 3591
5/22 UA837 SFC NRT エコノミー: Q 3591 3591
6/4 NH630 HND CTS プレミアム株主優待 796 1675
6/5 NH72 CTS HND プレミアム株主優待 796 1675
6/18 NH583 HND MYJ プレミアム株主優待 683 1495
6/19 NH592 MYJ HND プレミアム株主優待 683 1495
7/1 NH57 HND CTS 株主優待 477 1165
7/3 NH70 CTS HND プレミアム株主優待 796 1675
7/8 NH415 HND UKB 特割C 262 820
7/10 NH20 ITM HND プレミアム特割A 437 1100
7/23 NH469 HND OKA プレミアム株主優待 1537 2860
7/23 NH1771 OKA ISG 特割C 231 770
7/23 NH1770 ISG OKA 特割C 231 770
7/23 NH476 OKA HND プレミアム株主優待 1537 2860
8/6 NH35 HND ITM ビジネスきっぷ 406 960
8/18 NH35 HND ITM ビジネスきっぷ 406 960
8/21 NH28 ITM HND 特割C (プレミアム) 507 1100
8/27 NH28 ITM HND 特割C 304 820
9/3 NH995 HND OKA プレミアム株主優待 1783 2860
9/3 NH1725 OKA MMY 特割C 191 665
9/4 NH1730 MMY OKA 特割C 191 665
9/4 NH478 OKA HND プレミアム株主優待 1783 2860
9/18 NH829 NRT BOM エコノミー: U 4263 4411
9/21 NH830 BOM NRT エコノミー: U 4263 4411
  • 合計マイル: 31859
  • 合計PP: 50698

合計28便、うち国際線が4回。国際線はQ運賃とかU運賃とかだったけど両方出張なのでらっきーという感じでした。50000PPたまった後も沖縄いったり、キャンペーンでプレミアムポイントが5%積算されたり、11月にシアトルいったりするので最終的には63000PPくらいになりそう。でもさすがに10万はちょっとなー……

いつの間にかWindowsストアにアプリを提出するAPIが使えるようになってました

Build2016あたりでアナウンスされていた、ストアにアプリを提出するAPIがいつの間にか使えるようになっていたみたいです。と言ってもまだ全員ではないみたい。

このドキュメントの更新日が2016/9/6なので、この時点ではまだFeedbackからAPIつかいたいお!!!!って申告した人に順次APIが利用できるフラグを立てていっているようです。 僕のDevCenterアカウントはこのフラグが有効になっているので、このAPI経由でAristeaの毎日更新チャネルというのを作ってごくごく一部のユーザさんに提供しています。*1

で、Aristeaは今現在VSTSで毎日午前3時から自動ビルドされているのですが、その成果物を自動でDevCenterになげたいですよね。っていうわけで作ったのがこれです。

Azure ADを設定したりうんぬんいろいろすると使えます、がいつのまにか公式でVSTS対応のアドオンがリリースされていたのがこちら。

このアドオンにいま勝てるところといえば、Package Flightに提出できます!!ってところだけです。しかしここも

まもなく実装されるようです。もうなんだか早くもいらない子です。

一応インストールの仕方だけ書いておきます。インストールにはnodeが必要ですが、お手元のWindows 10 AUBash on WindowsでもOKです。

; nodeない人むけ
$ git clone https://github.com/isaacs/nave.git
$ cd nave
$ ./nave use latest
$ cd ..
; ここからインストール
$ git clone https://github.com/tmyt/wspublish-task.git
$ cd wspublish-task
$ npm install
$ npm run tfx-upload

*1:ご希望あればTwitterあたりでご連絡くださいませ

14393で使えるようになったトースト通知の新機能

Anniversaty Update(Build.14393)でAdaptive Toastにいくつか新機能が提供されているようです。

いままでの機能に加え、

  • タイルと同じようにレイアウトの自由度が上がった
  • Heroイメージを設定できるようになった
  • 設定できるテキストの位置が増えた
  • コンテキストメニューが拡張された

という具合です。あいかわらずNotificationチームはBlogでのみ情報提供な感じなんですかね…

TBook10の下半身を注文した

Teclastって中国メーカのTBook10ってタブレットがあって、Surface Bookみたいに2-in-1な感じでドックできる専用キーボードがあるんです。けどこれ、なんか不具合があったとかなんとかで発売が延期されてて海外のショップで在庫ある!っていって、問い合わせたらやっぱりないです。みたいなところばっかりでいったい本当にあるんだろうか…と思っていたんですが

日本で買えるところがあったので注文しました!8/22 2:00現在すでに在庫切れになってますが、前も在庫なしだったのでもしかするとそのうち復活するのかも。一応日本のサイトだからちゃんと在庫もってるはず……

Aristeaのフィルタ式のところだけをライブラリにしました

Aristeaで使えるフィルタ式のパーサとかとかそのへんをライブラリにまとめなおしました。Freesiaといいます。

ごくごく一部のテスタのみなさまにはFreesia版でじっくりテストを進めているところです。ですので、現時点でストアに公開されているやつはまだFreesia版ではないです。 Freesiaが導入されると、フィルタ式にLambda式とLinq likeなメソッド呼び出しがサポートされるようになります。つまり、次のようなフィルタが書けるようになります。

// 動画を含むツイートだけをとりだし
extended_entities.media.any(x => x.type == 'video')

いままでだと、配列にたいするcontainsしか処理できなかったんですけど、これでLINQ的なのが呼べるので柔軟さがかなりあがりました。 たぶん、そのうちリリースするとおもいます。

ExtendedExecutionSessionでサスペンド延長中にリジュームしたときちゃんと面倒みないと運が悪いとアプリが死ぬ話

UWPでOnSuspendingでファイルを保存するとかどうしても長いことかかることをしたいときにExtendedExecutionSessionというのでサスペンド時間を延長できます。結構便利なので頭の隅に置いておくといいと思います。

で、表題の件ですが、ExtendedExecutionSessionでサスペンド時間を延長して、その中でながーーーい処理をしているときにアプリがリジュームしてきて、さらにExtendedExecutionSessionのRevokedイベントで何もせず、ずっと長い処理を実行し続けて15秒ぐらい経過するとOnResumeに失敗してアプリが死にます。

ちゃんとまとめます。

  • ExtendedExecutionSessionを使ってる
  • OnSuspendで長いことかかるかもしれないことをやってる
  • ExtendedExecutionSession.RevokedとかこないでしょHAHAHAとか思ってる

なぜなのか

GetDeferralしてからCompleteするまではOnResumeの実行がブロックされる。ようです。まぁいわれてみればその通りなんですが…。

どーすんの

OnResumeが来たときExtendedExecutionSessionのRevokedイベントが呼ばれます。なのでちゃんとOnResumeは検出できるわけです。 つまり、ここでいったんdeferralを終了してあげるとブロックされていたResume処理が実行されるのでアプリがりじゅーむできずに死ぬことはなくなります。が、サスペンド処理は適当にいい感じにする必要はあります。

こんなん

とりあえずこういう感じで実装してそれなりに動いているようですが、これでいいのかよ感はあります。

var completed = false;

extendedSession = new ExtendedExecutionSession();
extendedSession.Reason = ExtendedExecutionReason.SavingData;
extendedSession.Revoked = (o, args) =>
{
    lock (this)
    {
        if (completed) return;
        completed = true;
    }
    deferral.Complete();
    extendedSession?.Dispose();
    extendedSession = null;
});