2018年2月8日木曜日

Win10 Fall Creators Update + F10 で、ふたばへの書き込みに不具合が生じている場合の対処法

Windows 10 Fall Creators Update で F10 image bbs browser をお使いの場合、一部に以下のような問題が発生しています。


  • 最近 Fall Creators Update に更新したら、F10でふたばに書き込もうとすると「送信に失敗しました。cookieを有効にしてもう一度送信して下さい」エラーが出るようになった
  • でもEdge・Chrome のような他のWebブラウザだと普通に書き込めてしまう

この問題は F10 v1.5 (Fall Creators Update 以降用)と ネットワーク環境 の組み合わせで発生していることが判っています。この場合、こちらにご連絡頂く事で問題を回避できる可能性があります。

メールアドレス  tickets @ ddlg.uservoice.com 宛に、今回の件と、「お使いのWindows 10にログオンするのに使っているマイクロソフト アカウントのメールアドレス」 を書いて送ってください。
私が受け取り次第、こちらでストア上のリストに追加します。
リストに載っているアカウントに対してはOSが最新であっても例外的にF10 v1.4.x (Creators Update用) が配信され、問題の回避が可能になります。


※この件、2016年・今回ともにUservoice・フィードバックHub に報告して頂いたユーザー様のおかげで対処が可能になりました。有難うございました。



背景の説明


この問題、原因は判っていません。ただこれまでに頂いた状況報告と調査から、以下の事が確認出来ています。


  1. ネットワーク環境による。… 起こる人の所では起こり、起こらない人の所では全く発生しません。
  2. F10 で問題があっても、Edge・ChromeのようなWebブラウザでは正常に書き込める。… この事から、ふたばでのいわゆる「規制」とは無関係です。
  3. ライブラリ Microsoft.NETCore.UniversalWindowsPlatform を 5.1.0 より新しいものに上げると発生する。

1によりデバッグが中々困難であり、直すのは正直諦めています。また、これまでこの問題を報告して下さった方は二人だけです。

※ Edge・Chromeでも問題が発生する場合…それは本当に規制されている可能性が大です。この記事で言っているF10の問題ではありません。


この問題、最初に判明したのは2016年、Microsoft.NETCore.UniversalWindowsPlatform を5.2.0に更新しようとしたときでした。この時は更新を中止してお茶を濁したのですが、Fall Creators Update のタイミングで(.NET Standard 2.0を使うために)更新したらまた発生してしまいました。困った。今後の事を考えると、今回また更新を諦める==.NET Standard 2.0 を諦める、というのは選択しづらいです。

今回はストアの「フライト パッケージ」…特定のMicrosoft Account グループに対して一般向けとは別のアプリ パッケージを展開する仕組み、本来はテスト用…を使い、こういう特殊な処理に使っています。

ただこの扱いの場合、対象となるユーザーさんにはこの先ずっとCreators Update レベルのF10 が配信され、今後の機能追加等からは置いて行かれることになります。
それについてはごめんなさい、堪忍して下さいと言うしかないです。






2018年1月28日日曜日

App を Windows Timeline に対応させる 2/2

UWP App のTimeline 対応、実践編です。拙作のApp F10 image bbs browser で行った作業に即して説明してみます。

この記事は
App を Windows Timeline に対応させる 1/2
の続きです。

Windows Timeline 表示例


前準備


Fall Creators Update レベルのAPIを使うため、App のプロジェクト プロパティ→アプリケーションでMinVersionを 10.0.16299 にします。





必須では無いですが、このNuGetパッケージも追加します。後述するAdaptive Cards のJson 生成はこれが無いとやってられないです。

AdaptiveCards - NuGet Gallery

https://www.nuget.org/packages/AdaptiveCards/

UserActivity を生成するClassには以下二つのusingを追加します。

using Windows.ApplicationModel.UserActivities;
using AdaptiveCards;


User Activity の作成とOS への登録


前の記事でも触れましたが、App 上の作業の節目…ドキュメントを開いた時など…のタイミングでUserActivity を生成し、OSに登録します。OS はTimeline 上にこのUserActivity をタイルとして表示します。


UserActivity の作成と登録



基本、これだけでUserActivityの登録が可能です。ただこの例では Adaptive Cards を使っていないため、Timeline 上の表示は以下のように大変シンプルなものになります。実際には殆どの場合、これから説明するAdaptive Cards を使ってタイルの中身を組み立てていくことになるでしょう。



Adaptive Cards を使わない表示例





Adaptive Cards


詳しい説明は省きますが、Microsoft が考える通知カードの標準形といったところです。カードの中身…データのJSONスキームと、コンテナ…カードを表示するデバイスの能力を記述するスキームが分離してあるのが特徴でしょうか。
Microsoft のAdaptive Cards 紹介ページを見て頂くと感じが判るかと思います。

Weather Compact - AdaptiveCards Sample



画面の右ペインにコンボボックスがあり、ここから表示するコンテナを選択できます。共通のJSONデータに対して、各デバイス…Windows の通知トースト、タイル、Teams, FacebookにKik、そしておそらくは他プラットフォーム…で「大体」意味が伝わるように表示しますよ、という。

その各デバイスの中にWindows Timeline も並んでいます。触っていると、表現力は他のデバイスと比べてそれほど高くはないようです。また、入力系のようにそもそもTimeline の使用方法にそぐわないものもあります。

さて、F10 ではこのようなJSONを渡しています。以下のような背景画像付きのTileになります。

Adaptive Cards を使った例



このJSON文字列、素から文字列を足し合わせて気合で作っても良いのですが…上品に行うために 、「前準備」で触れた AdaptiveCards NuGet パッケージがあります。このパッケージ、別にUWP App用というわけでも無いので…Xamarin、その他 Desktop App等でも、.NET 環境でAdaptive Cards を作る場合は全部これでいけるはずです。

これで、この一つ上で貼ったJSON文字列が生成されます。


Protocol Activation によるAppの起動・アクティベーション対応


ここは特にTimeline ユニークな話でもないので省略しますが、このような作業になります。

  • Package.AppxManifest で自アプリのプロトコル名を登録する
  • Appx.Xaml.cs にOnActivate を追加し、args.Kind == ActivationKind.Protocol だったらばパラメータを拾ってページを作る・または渡す


URI のアクティブ化の処理


注意など


  • たまに、Timeline 上の表示が正しく行われない場合があります。特にこちらでAppのUserActivity 生成コードを弄った場合等に多いようです。この場合、一旦ログオフ→ログオンで元に戻る場合が多いです。
  • 良くあるのは、作成したAdaptive Cards JSON文字列が不正で登録に失敗する場合です。この場合 userActivity.SaveAsync() で黙って落ち、特に例外が発生しないため大変分かりにくいです。 はまりがち。
  • 上でも触れましたが、Timeline 上のAdaptive Card ではあまり凝った表現は出来ないようです。先にAdaptiveCards.io のテストサイトで表現が実現可能かどうか確認すると良いでしょう。
  • Windows Timeline 上の画面からインクリメンタルサーチが可能ですが、ここで検索対象となるのはuserActivity.VisualElements.DisplayText と、Applicationの名前です。Adaptive Cards の中身は使われないようです。逆にAdaptive Cards を使用する場合 DisplayText は表示されませんので、ここに検索で拾ってほしいキーワードを追加しておくと良いです。


2018年1月3日水曜日

App を Windows Timeline に対応させる 1/2

まとめ

  • Windows Timeline は対応が簡単な割に得られる物が大きい
  • ただ、アプリにより向き不向きがある

Windows Timeline、最近のWindows 10 Insider Preview で使えるようになりました。UWP App をこのWindows Timelineに対応させる開発者向けガイドも出ています。今回自分のApp を対応させる機会があり、作業量が少ない割には効果が大きかったので紹介しようという趣旨の記事です。

※この記事には続きがあります。
App を Windows Timeline に対応させる 2/2


Windows Timeline とは


Windows 10 の次期大規模更新(RS4?)に入ると言われている新機能です。2018年1月時点では Insider Preview Build 17063 で使うことが可能です。アプリではWebブラウザ Edge、フォト等が対応しています。宣伝になりますが、拙作の画像掲示板ブラウザ F10 も対応しています。

F10 Image bbs browser
https://www.microsoft.com/store/apps/9nblggh1ntrd

なお、API 自体はWindows 10 Fall Creators Update (FCU) から入っており、SDKもFCUレベルの16299から既に対応しています。このため、現時点でもWindows Timeline 対応アプリをビルドし、ストアに上げることが可能になっています。


Windows Timeline
タスクバー左から3番目のアイコン、またはWin+Tabで表示されます


※以降、仕組みについては推測込みです。ウソが混じっているかもしれません。またIP 17063 の動作を元に書いているため、今後変わるかもしれません。


対応に必要な作業と得られる効果


仕組み・方法を説明する前に、得られる効果を書きましょう。Timeline に対応するためにアプリ側でやる事は主に二つで、


  • 適切なタイミングでUserActivityをOSに投げる
  • Protocol Activation …Uriを使った起動・アクティベーションに対応する


前者はかなり楽に済みます。後者は…アプリに依るのですが、いわゆるブラウザ系、URLのように文字列一本でアプリの状態を記述できる場合は楽に対応できるのではと思います。ここは後でまた触れます。

これらを行うだけで、アプリの操作履歴の同期がデバイス間で、OS組み込みの洗練されたUIで可能になります。PC+ノート+タブレット…PC複数持ちが当たり前の昨今、簡単に作業状態をデバイス間で引き継げるのは使ってみると大変に便利です。

この操作履歴の同期、Timeline無しで自分でやるのは結構手間でして…

  • Roaming Folder を使ってデバイス間で同期する…Appの履歴DBから一部をRoamingFolderに書き出し、変更を検知してDBに取り込む等
  • Project Romeを使う…リモートデバイスを列挙し履歴データを送受信する仕掛けをRemote AppServiceで作る

等を行う事になります。どちらもある程度安定動作させるにはそこそこ工数がかかります。拙作のブラウザ F10ではこの両方を実装してあるのですが、それに比べると今回のUserActivity を使ったWindows Timeline への対応は圧倒的に簡単、そしてユーザビリティは優れています。お得過ぎる。


右上の検索ボックスからインクリメンタルサーチが出来ます。便利。
検索対象になるのはVisualElements.Title と Appの名前で、AdaptiveCardの中は見てくれないようです。
この例ではVisualElements.Titleにスレ名+板名+BBS名をまとめて登録していますが、表示しているのはAdaptiveCard になっています。


同じMicrosoft Account を使うデバイスにFall Creators Update のシステムが居る場合、
UserActivityはこのようにActionCenter上に表示されます。
クリックするとTimeline同様にAppが起動します。
FCUから登録したUserActivityは、他の17063 システムのTimeline上に表示されます。


他のデバイスで登録されたUserActivityは、右上にそのデバイス名が表示されます。



Windows Timeline の仕組み


アプリケーションはOSに対し、自分の状態を「UserActivity」という単位で投げます。
OSはそのアプリ毎の「UserActivity」を時系列に並べて表示します。それが「Windows Timeline」です。

ユーザーがWindows Timeline 上のタイルをクリックすると、OS はUserActivity内のプロパティ ActivateUri をパラメータにしてアプリを起動又はアクティベートします。

UserActivityを「どのタイミングで」OSに投げるかはアプリ設計者に任されています。Webブラウザなら新しいタブを開いた、Officeならドキュメントを開いた、という操作の節目でUserActivityを発行するものが多いようです。

OSは、この投げられたUserActivity を一台のローカルマシンだけではなく同じMicrosoft Account でログインしている複数のシステムで共有します。この同期、Project Rome と呼ばれる Microsoft Graph ベースの仕組みを使っているようです。このため、Microsoft Graph に対してRESTで直接叩く事により、プラットフォーム非依存で使う事が可能…というように見えます(ただ、Timeline の「表示」自体は別にアプリが必要でしょう。Android ならば Microsoft Launcher あたりが適任っぽいですが。また、Rome系のAPIはGraph上だとBeta扱いのが多いので使っていいのか少し微妙)。


UserActivity 


UserActivity、色々プロパティはついているのですが、まずは一発表示してみたい時に必須なのは以下二つです。


  • UserActivity.ActivationUri … Appをアクティベートするときに使うUri
  • UserActivity.VisualElements.Title 名前 表示・検索に使われます(後述のAdaptiveCardを使う場合表示はそちらになる)


ActivationUri は一番大事なもので、ユーザーがTimeline 上のタイルをクリックするとOSはこれを使ってAppを起動します。

UWP Appでは、App 毎に独自のActivation Protocol をOSに登録することが出来ます。
例えばF10 が入っている環境ですと、Win+Rの名前をつけて実行、で

ddlgf10://a.4cdn.org/a/thread/166549698.json&view=post

とするとF10が起動し、そのスレが開きます。
これは、

  1. OSは ddlgf10:// をプロトコルとして認識し、(AppxManifestで指定する)
  2. パラメータをF10に渡し、
  3. F10 はOnActivate でそれを受け取り処理する(というコードを自分で書く)

という仕組みになっています。Windows Timeline はこのActivationUriを含むオブジェクトUserActivity を折々のタイミングでOSが記憶し、リストとして表示するという仕掛けになります。


Timeline への向き・不向き


上で説明したように、このTimeline の核は


  • アプリの状態…アプリが使うリソースも含めて…が、一行のUri で示される


事にあります。これが出来ないアプリの場合、あまり役に立てる事ができないです。

例を挙げると、

・F10 の場合… これはブラウザアプリです。Web上の画像掲示板のスレッドを取得し、XAMLでレンダリングします。
このため、アプリの状態は「表示するスレのURL」+「F10上の表示形式オプション」で完全に記述することが可能です。
そしてこれは、システムユニークでは無く…どのシステムでも共通に(ネットに繋がれば)使用可能です。リソースはネット上のスレだからです。

・画像ブラウザの場合
例えばピクチャライブラリ上の画像 hoge.jpg を表示する場合を考えます。これをURLとして持ち、UserActivityとして登録する事は可能でしょう。ただ、このリソースはローカル…このデバイス上でのみ参照可能であるため、他のデバイス上でUserActivity をWindows Timeline に表示する意味がありません。
こういう場合、Timeline 上に表示するActivity としては不適切かもしれません。
逆にリソースがクラウド上にある場合…例えば画像がOneDrive上にある場合はTimelineで扱うにはピッタリでしょう。
他にもブックリーダー等、OneDriveとTimelineとの食い合わせはかなり良いです。OneDrive上の本のUri+リーダーでの読書位置、を合わせた物をUriとしてUserActivityに入れれば、かなり良い感じになりそうです。

・ゲーム
ゲームの場合、状態をマシンAからBにポンと渡して引き続き遊べるのは魅力かもしれません。ただ、状態の区切りをどこに置くかという問題と、状態をUriとして一本にシリアライズできるのかという。Uri が長さどれくらいまで行けるのかはわかりませんが、あまり無理はしない方がいい気はします。

次の記事では、F10 を Windows Timeline 対応させた実作業の様子をコード例を挙げて書いてみます。

App を Windows Timeline に対応させる 2/2

2018年1月1日月曜日

あけましておめでとうございます

あけましておめでとうございます。
本年も宜しくお願い致します。

…この記事、あけおめの体で去年を振り返ろうという趣旨です。
昨年のトピックを発生順に並べてみますと…

Xamarin に手を出した  (2月)


Xamarin.Android を使ったApp Wheel World Clock for Android をリリースできました。
http://ddlgjp.blogspot.jp/2017/05/wheel-world-clock-android.html
元々はWin8/WinPhone8.1, UWP用に出していたアプリです。
F10 for Xamarin.Forms ...は少し動いた所で手が止まっています。無念。

Win10 Mobileを諦めた (4月)


Windows 10 Mobile について
http://ddlgjp.blogspot.jp/2017/04/windows-10-mobile.html
ムリダナ

Microsoft MVP for Windows Development を受賞した (6月)


(*´▽`*)ウラー 
http://ddlgjp.blogspot.jp/2017/06/microsoft-mvp-for-windows-development.html
受賞のベネフィット、特典には色々あるのですが、今の所一番楽しいのはMVP専用のメーリングリストです。濃い話がドコドコ流れてきてとても良いです。


ただ、後半は個人的な事、家族の事(故郷の父に介護が必要になるという…都会に出て働いてるおじさんなら誰もが通ると聞いてはいましたが私にも来ました。今は落ち着いておりますが)もあり、中々開発活動に力を入れられなかったなという所があります。

今年は…まずは3月にRedmond・Bellevue で開かれるMVP Global Summit に出られるのが楽しみです。また、Xamarin.Formsと.NET Core, serverでも遊びたいナーと思っています。

2017年11月18日土曜日

Microsoft Docs を寄ってたかって直す

UWP App を開発していると、UWP やWinRT API のドキュメントをMicrosoft のWebから検索し調べるのは必須の作業になります。そのドキュメントが腐っていてつい舌打ちしてしまう事は無いでしょうか?チッ……僕は良くあります。

しかし今では、名も知らぬ誰かを呪う前に有効な選択肢があります。GitHub でPull Requestを送り、自分でドキュメントを修正する事が可能になってきています。
最近この修正を行う機会があり、案外ラクにできたので…その手順を簡単に説明する事で、Microsoft Docs を直す人が増えるとイイナーという趣旨の記事です。


はじめに


Microsoft Docs へのContribution についてのドキュメントは
https://docs.microsoft.com/ja-jp/contribute/
に完備されています。判らない事は全部こちらに載っているはずです。ただ完全過ぎて全部読むのも大変なので、適度に端折っているのが今回の記事になります。


  • 最初に、GitHub のアカウントが必要です。
  • やり取りは英語になります。


※この記事、以降GitHub に慣れている人には今更な話が多いです。


Microsoft Docs の文書を表示する


この1年程で、これまでMSDN Documents として整備されていた文書の大部分は新サイト Microsoft Docs に移行しています。


Microsoft Docs トップページ


コンテンツ自体はMarkdown(のGitHub拡張)で記述されており、GitHubで管理されています。そして、一部の文書についてはユーザーがPull Request(以降PR、変更要求)を送ることが可能になっています。

そういった文書は、画面の右カラムに「Edit」ボタンがついています。文書によっては右カラムでは無く、真ん中のコンテンツエリアのセクション毎に「Edit」ボタンがついている物もあります。

このEdit ボタンをクリックすると、GitHub上の当該コンテンツのページに飛びます(ボタンの名前に反して、この時点では表示だけで編集は始まりません。気軽にポチっていいです)。このボタンが表示されていない場合、現在の所その文書にPRを送ることはできません。後で触れます。


Edit ボタンが右カラムに表示されている例
ちなみにウィンドウをもう少し狭くすると左上に移動します
Acrylic material


セクション毎にEdit ボタンが表示される例
Windows.ApplicationModel.Core.CoreApplication



GitHub 上での作業


ソースの表示


Microsoft Docs 上の文書に対応する、GitHub 上のソースが表示されます。


GitHub 上の Acrylic ソース


編集


編集を始めるには、右上の鉛筆アイコンをクリックします。
GitHubのMarkdown エディタが表示され、編集が可能になります。
画面上部に説明が出ているように、この編集作業は作業者(あなた)のリポジトリの中に作成されるブランチ(この画像の例ではMicrosoft/windows-uwp)に対して行われます。
プレビューで確認しつつポチポチ書きましょう。


Markdown エディタ
タブ切り替えでプレビューを表示できます



編集が終わったら画面の一番下までスクロールします。
Propose file change のフォームに変更のタイトルと説明を書きます。ボタンをクリックすると、Create Pull Request の画面に飛びます。

ファイル変更の提案
簡潔なタイトルと内容の説明を書きます



Pull Request の作成


先ほど行った編集前・後の比較が表示されます。諸々確認の上で覚悟が出来たらCreate Pull Request ボタンを押して作成です。
このタイミングで、

  • 自動的に自分のリポジトリ内にブランチが作成(フォーク)され、
  • そこで編集が反映され、
  • その差分がPull RequestとしてMicrosoft側に送信

と物事が一気に進みます。今迄は基本自分の中だけでの作業でしたが、ここでポチっとした以降は担当者に通知が飛び、他の人との共同作業になります。

なお、簡単な編集・修正では、基本的にはこのリポジトリ上での自動フォークを使ってほしいようです。普通にローカルにブランチ作って編集してSyncして…というのはまだあんまりのようです。


Pull Request作成画面



Pull Request の処理


以降は、処理が進む様子をPull Request のページで確認します。

基本的には、


  • 共通のレビュー担当者がPRの書式等をざっくり確認し、
  • 次にそのドキュメントの担当が中身を確認し、
  • OKならマージされて完了!

という流れです。大体数日から1週間~10日くらいで終わる感じです。また、マージされてから実際のMicrosoft Docs のWeb側に反映されるにはさらに数時間掛かります。


PRの処理フロー
これは以前に私が上げた、Acrylicのページのカラーブラシの名前間違ってるから直したよというPRです



編集できる文書・できない文書


上でも触れましたが、Edit ボタンが表示されていない文書にPR を送ることはできません。
2017年11月現在では、UWP App、WinRT APIについてはen-us 、英語ページはほぼ全てEdit ボタンがあり、PRを送ることができます。しかし日本語ページは全て未対応です。

これは文書のジャンルによって状況が違います。例えば .NET や Outlook では、日本語に対する修正も可能になっています。


Outlook では日本語直してキャンペーン中だそうです。
https://www.facebook.com/MVPAwardProgram.JP/posts/1476999755669677

日本語のちゃんとした説明もあります。人力翻訳には温かみがある…
https://github.com/OfficeDev/outlook-dev-docs.ja-jp/blob/live/CONTRIBUTING.md


なお、編集できる・できないについて特にまとまったディレクトリ等があるわけでは無く、その文書にEdit ボタンがあるかどうかで判断して下さい、という事のようです。





2017年11月14日火曜日

F10 updates for Win10 Fall Creators Update

F10 image bbs browser を更新しました。
現時点での最新版は 11月12日リリースの ver 1.5.400 / 1.4.400 になります。

F10 image bbs browser
https://www.microsoft.com/store/apps/9nblggh1ntrd

なお、F10 のVersion 1.1, 1.2, 1.3, ... は それぞれ Win10 のバージョンに対応しており、お使いのWin10 バージョンに合わせてダウンロード・インストールされます。

  • F10 v1.1.x - Win10 1507
  • F10 v1.2.x - Win10 1511 (November Update)
  • F10 v1.3.x - Win10 1607 (Anniversary Update)
  • F10 v1.4.x - Win10 1703 (Creators Update)
  • F10 v1.5.x - Win10 1709 (Fall Creators Update)

コマンドライン起動のサポート / Support Command-Line Activation


コマンドライン・又は「名前を指定して実行(Win+R)」からF10 を直接起動できます。


  • F10 <enter> - launch F10
  • F10 2chan/img - launch F10 and open img
  • F10 futaba/may - launch F10 and open may
  • F10 4chan/a - launch F10 and open /a/


To open the board by parameter, the board should be added as favorites at first.
パラメータで指定できるのは、お気に入りに登録している板です。
既にF10 が起動している場合はここで指定したカタログ表示に切り替わります。

なお、FCU でのコマンドライン起動サポートについては当ブログで記事にしています。

Fall CU - コマンドライン・Win+Rからの UWP App起動
https://ddlgjp.blogspot.jp/2017/11/fall-cu-uwp-app.html





起動の高速化 / Speed up startup time


以下の変更により、起動が少し早くなりました。ただv1.4 - Creators Update だと最後の効果が無いため、良く判らないかもしれません。





メールアドレスの表示 / Showing mail address at posts view


レスにメールアドレスが設定してあった場合、表示します。
何で今まで入れていなかったのか今となっては定かではないです。

Fluent Design のサポート


v1.5 はFCUのAPIを使った上品な実装です。
v1.4 は今まで通り、直接Visual Layerをいじる実装です。


Wheel World Clock updates for Win10 Fall Creators Update

世界時計アプリ Wheel World Clock を Windows 10 Fall Creators Update(以下FCU) に合わせて更新しました。
Wheel World Clock は以下のシステムでお使い頂けます。今回はWin10 FCU用のみの更新です。


  • Windows 8.1
  • Windows Phone 8.1
  • Windows 10 PC, Mobile, HoloLens, etc
  • Android 5.0 以上



Wheel World Clock for Windows
http://apps.microsoft.com/windows/app/wheel-world-clock/1e591002-4ffa-4d49-b8e7-4d82f1211d16

Wheel World Clock for Android
https://play.google.com/store/apps/details?id=com.ddlg.wwcd


コマンドライン起動のサポート / Support Command-Line Activation


コマンドライン・又は「名前を指定して実行(Win+R)」で「WWC」<Enter>で起動します。


実はAcrylicも有効なのですが透明度が低いので
言われてもよくわからない