書くことないです。

ayamadoriが独り言を呟く日記。

UWPアプリのタイルアイコンを作るのは苦行。(Windows 11 対策)

ayamadori.hatenablog.com

最初に記事を書いたのは5年半前か。。。
来たるべき Windows 11 に備えてアイコンを作り直した。その中で確認できたことを覚え書き。
※まだプレビュー版なので今後変更の可能性あり

Windows 11 ではタイルまわりがかなり整理(というか削除?)されるので、作るアイコンの種類も減らせると思うんだけど、当面は Windows 10 との互換性を確保するために対応続ける必要がありそう。
とりあえずもう何年も更新されてないドキュメントを何とかしてくれ。。。

拡張子の関連付け用のアイコン

Handle file activation - UWP applications | Microsoft Docs

Match the look of the app tile logo and use your app's background color rather than making the icon transparent. Have the logo extend to the edge without padding it. Test your icons on white backgrounds.

前はよく分かってなかったところがちょっと分かった気がする。要は

アイコン内に白色(#FFFFFF)が多い*1と、パディング部の透過色が認識されず、白色扱いになる

ということのようだ。対策としては白色の代わりにちょっと色を付けてあげれば良い。少なくとも#FBFBFBではOKで、パディング部が正しく透過される。

スプラッシュスクリーン

blogs.windows.com スプラッシュスクリーンの背景がアクセントカラーからテーマに合った色に変わった。

Tailor your resources for language, scale, high contrast, and other qualifiers - UWP applications | Microsoft Docs

Compatibility behavior

For backwards compatibility, Windows includes logic to detect a monochromatic icons and check whether it contrasts with the intended background. If the icon fails to meet contrast requirements, Windows will look for a contrast-white version of the asset. If that’s not available, Windows will fall back to using the plated version of the asset.

おそらくこの辺りのことだと思うんだけど、

アイコンの色が薄いと、ライトテーマでもスプラッシュスクリーンの背景が自動的にダークテーマの色になる

アイコン色を濃くすれば正しくライトテーマの背景になるけど、そのしきい値というか定量的な判断基準は不明。
白単色のアイコンがライトテーマだと白黒反転するのは認識していたけど、これは知らなかった。

Visual Studioマニフェスト デザイナー

この機能がいつ追加されたか把握していないんだけど、[Windows ライト テーマの色変換を適用します]は正直役に立たない。

f:id:ayamadori:20210816161635p:plain

アイコンの白色部をライトテーマ用アイコンでのみ黒色に反転してくれるんだけど、微妙に白色が残ってしまって見た目が汚い。

アイコンデザイン

これは今も昔もガイドラインが無いので、たぶん今後も出てこないだろうな。。。
MS公式アプリのうち、おそらく唯一アイコンの SVG が公開されてる Windows Terminal を参考にした。
terminal/Terminal.svg at main · microsoft/terminal · GitHub

グラデーションはリニアで、11時の方向に明るくしていく。

<linearGradient id="" x1="" y1="" x2="" y2="" gradientUnits="userSpaceOnUse">
<stop stop-color="{狙いのRGB}"/>
<stop offset="1" stop-color="{狙いのRGB+#1A1A1A}"/>
</linearGradient>

※ここで、((x1+x2)/2, (y1+y2)/2) = 対象図形の図心、(y1-y2)/(x1-x2) = √3

ドロップシャドウはソースからよく分からなかったので、Figma の設定をそのまま貼っとく。これを両方適用。
f:id:ayamadori:20210818233452p:plain f:id:ayamadori:20210818233509p:plain

*1:ただ存在するだけでもNGかも?未確認

Android Enterprise Recommended のアップデート要件を検証してみた。@ moto g7 power

Android Enterprise Recommended という、Google が法人向けに端末・サービスを検証・認定する制度がある。 www.android.com

moto g7 power という、この認定を取得している端末を買ったので、認定要件にあるアップデートが要件通りに来たか検証した。 androidenterprisepartners.withgoogle.com 結論から言えば、アップデート要件を満足していた。

アップデート要件

公式記載のアップデート要件は以下の通り。

サービス 要件
セキュリティ アップデートのサポート 90 日以内のセキュリティ アップデート
メジャー アップデート リリースのサポート 現在出荷中のリリース + ワンレター アップグレードのサポート

Android – Android Enterprise Recommended の要件

※"高性能な端末"(英語だと"Knowledge Worker")に該当

アップデート履歴

実際の端末のアップデート履歴は以下の通り。

確認日 セキュリティパッチレベル ソース
2019/06/03 未確認 予約して発売と同時に購入。日付は購入履歴より
2019/07/08 2018/12/01 https://twitter.com/ayamadori/status/1148204017744396288
2019/08/02 2019/06/01 https://twitter.com/ayamadori/status/1156946566160109568
2019/10/25 2019/10/01 https://twitter.com/ayamadori/status/1187701516045389824
2019/12/27 2019/12/01 https://twitter.com/ayamadori/status/1210499357864124416
2020/03/10 2020/02/01 https://twitter.com/ayamadori/status/1237350365390983168
2020/05/06 2020/04/01 https://twitter.com/ayamadori/status/1257859131957903361
2020/09/10 アップグレード開始 https://twitter.com/ayamadori/status/1304064307840258048実際には自動更新されず、↓で強制アップグレードを実施*1
2020/12/08 2020/10/01 https://twitter.com/ayamadori/status/1335977444042395650
2021/01/09 2020/12/01 https://twitter.com/ayamadori/status/1347739309764268032
2021/03/05 2021/02/01 https://twitter.com/ayamadori/status/1367600574766534658
2021/05/08 更新終了 https://twitter.com/ayamadori/status/1390886585105715201

検証

購入直後とアップグレード期間を除き、概ね2ヶ月おき、セキュリティパッチレベルから30~60日程度でアップデートが提供されていたことが分かる。

また、出荷時の Android 9 から Android 10 へのアップグレードも実施された。

以上のことから、アップデート要件を満足していたことが確認された。

*1:2021/2あたりに自動更新が来た模様

バッチファイルへのドラッグアンドドロップで Windows Terminal が開くようにした。

経緯

Windows Terminalを初期リリース以来ずっと使ってる。
といっても大したことはしていなくて、自分の用途はせいぜいこれくらい。

  • OpenSSH経由でLinuxサーバを管理
  • wingetでアプリをインストール&更新

他にCUIの画面を見るのは

でファイル処理をする場合なんだけど、デフォルトのコマンドプロンプトが表示されてしまう。
せっかくなのでここでもWindows Terminalを表示させて、コマンドプロンプトを見ずに暮らせるようにしてみた。

やったこと

Windows Terminalはコマンドライン引数に対応しているので、基本的には

wt new-tab hogehoge.bat

をリンクに設定したショートカットファイルを書いて*1、これをもとのバッチファイルの代わりにすれば良い。
ただこれだとパスに半角スペースが含まれている場合、そこでパスが分割されてしまう。
これが仕様なのかバグなのか分からないけど、とりあえず手元でPowerShellスクリプトを書いて解決した。

上で作ったショートカットを以下のように書き換えればOK。*2

wt new-tab pwsh -File PathToWT.ps1 hogehoge.bat

【追記】あとドライブ上で8.3 ファイル名の作成を無効にする必要がありそう。 https://support.microsoft.com/ja-jp/help/121007/how-to-disable-8-3-file-name-creation-on-ntfs-partitions

一応issueも書いた。 github.com

*1:実際にはバッチファイルのフルパスが必要と思う

*2:同上

GlobalSystemMediaTransportControls API で遊んだ。

長い。

(そしてまた長い)前置き

全然大してことやってないんだけど、1年半前にその存在を知って以来ずっと気になってたのが解決したので覚書。

実際はVersion 1809 (OS build 17763)で入ったんだけど、サンプルやらドキュメントが全然なくてずっと放置してた。 docs.microsoft.com が、どうやら半年ほど前にドキュメントが更新されてたらしい。 github.com github.com つまるところmanifestに以下のCapabilityを直書きすればOK。

<Capabilities>
      <uap7:Capability Name="globalMediaControl" />
</Capabilities>

というわけで以下サンプル。 github.com

何やってる?

API一覧を見ればおおよそ分かるけど、他アプリのプレイバックを操作してる。 docs.microsoft.com 作ったサンプルでは他アプリで再生中の曲名/アーティストや再生/停止の状態を取得してるけど、逆に他アプリの再生制御もできる模様。 もともとWindows 8.1/10には音量ボタンを押したときなどに出てくるSystem Media Transport Controlsというのがあるけど、それと似たことがサードパーティーアプリでもできる。*1

気になるところは?

  • UIスレッドへの反映は別スレッドを起こす必要がある。
  • アプリがバックグラウンドにいても状態変化を取得できるっぽい。PC上で最小化させてもOKだったし、バックグラウンドトリガーにそれらしい項目が無いというのもある。
  • What's Newでも全然推されてないし、長らくドキュメントが未整備だったのもあって、これを使ったアプリがストアの審査を通るのか不安。 docs.microsoft.com

*1:ハードウェアとの統合はできないので、完全に同じではない

Windows Store で公開しているアプリを Windows Store for Business/Education 向けにオフライン配信してみた。

このあたりを参考に。

Organizational licensing options - UWP app developer | Microsoft Docs

docs.microsoft.com

Windows Store for Business and Line-of-Business Applications – Management, Mobility, and More

Distribute LOB apps to enterprises - UWP app developer | Microsoft Docs

docs.microsoft.com

ひょっとして今回のように特定企業のみを対象にした配信でなければ、LOB Publisher の招待を受ける必要は無かったかも。

せっかく法人向けに配信するんだからお金取ろうと思ったけど、日本のアカウントでは有料で配信できないらしい。

ツェルトで寝てみた。

買ったのはモンベルのライトツェルト。 webshop.montbell.jp 基本的には日帰りを含む登山時の非常用だけど、本番で使う前に慣れておきたかったのでキャンプ場で使ってみた。

まずはお約束。上記モンベルのサイトから抜粋。

ツェルトの注意事項
●ツェルトは就寝を目的としたテントではありません。正しい使用方法を理解してご使用ください。
●本体上部と出入り口上部のベンチレーター(換気口)は常に開いた状態になっています。コーティングにより気密性が高いため換気が必要です。特に冬季や気温の低い条件下では、結露などが原因で換気性能が低下する恐れがありますので、十分に換気を行ってください。

ツェルトを設営?する

まず、出発前にツェルト底部のひもをすべて結んでおく。結ぶのは結構時間と手間がかかるのに対してほどくのは一瞬でできるので、常に結んだ状態で持ち運んだほうが良いと思った。

現地できちんと設営するならポールや張り綱、ペグが必要だけど荷物を増やしたくない。登山時ならトレッキングポールがあるかもしれないけど今回は普通のキャンプってことでそれも無い。そもそも非常時にきちんと設営する時間や心理的余裕があるとも思えないので、逆にとても乱暴な方法を試してみた。

背中にフレームが組み込まれたバックパックは、ベルトや重量バランスをうまく工夫するとこんなふうに自立するので、これをツェルトの奥側に立てる。 f:id:ayamadori:20180506074945j:plain そして手前(入口)側は、ツェルトの中で常に持ち歩いている折りたたみ傘を開く。するとこんな感じになる。ヘニャヘニャw あとは荷物をツェルト内に置いて風で飛ばないように押さえれば完成。 f:id:ayamadori:20180506065825j:plain 設営方法を考えて試行錯誤した時間を除けば設営には5分もかからないはず。

今回はキャンプということで、念のため外にグラウンドシート(100円のブルーシート)と中に銀マット(100円)を敷いてみた。

実際に寝てみる

スペース

横に荷物を置いたうえで、シュラフに入った人間一人が横になって身体を伸ばすスペースはあるので十分だと思う。寝返りも打てる。

ただ高さがおよそ50cmくらいしかないので、中で座ろうとすると自分の頭でツェルトを支えることになる。例えば着替えなど、寝ること以外の活動はなかなか大変だった。

高さが低いせいか、風で倒れたりすることはなかった。でも足で蹴飛ばしたりしたら倒れるかもしれない。寝相も大事だw

寒さ

今回は本栖湖で2泊、四尾連湖で1泊した。*1

最低気温は一桁、雨は降らなかったけど風は結構強くて、特に本栖湖2日目なんかはかなり寒く感じた。こんな環境でツェルトの中に入ると、風を遮ってくれるのとスペースが狭くて体温がすぐに周りの空気に伝わるのでかなり暖かくなる。普通のテントと違って完全に密閉されないので少し心配していたけど、実際に寝てみて安心した。外で凍えてるのとは気持ちの余裕が全然違う。

とはいえもちろん夜はちゃんとしたシュラフが無いと歯が立たないし、本栖湖2日目はそれでも耐えきれなくて足元にカイロを放り込んでた。実際の緊急時はシュラフじゃなくて防寒着とレインスーツまたはハードシェルだけの可能性が高いので、不安はあるけどこればかりは仕方がない。少なくとも無いよりマシなのは間違いない。

今度は雨が降っている環境でテストしてみたいけど、そんな都合よくはいかないよなw

結露

普通のテントにはフライシートがあるけど、ツェルトは基本的に1枚布なのでどうしても結露が発生してしまう。このサイズのツェルトだと暖かくなりやすいのと引き換えに外との温度差も大きくなるので、おそらくさらに発生しやすいはず。

実際、今回も結露した。ただしボタボタ垂れてくるほどではなかった。それに折りたたみ傘の下にいる限り、傘が身体やシュラフのほうに垂れてくるのを防いでくれていた。シュラフはどうしてもツェルト内壁に触れるので、そのときにいくらか水滴を吸ってしまうけど、中綿が化繊だったおかげかそれで保温力が落ちたとは感じなかった。

内壁は結露したけど、床は結露しなかった。もちろんグラウンドシートの地面に触れている側は濡れてしまうけど、それが室内側に入ってくることもない。ただグラウンドシートや銀マットの効果もあるかもしれないので、1日くらいはこれら無しで寝てみるべきだったと今は思う。

まとめ

期待通りキャンプ用途であれば十分使えそうだけど、やっぱり緊急時にはお世話になりたくないね。。。これを使うような事態にならないよう事前の計画と現地での慎重な判断が必要だ。

咳はアレルギーもあるかもしれないけど、僕の咳風邪が移っただけなのでは。。。結局帰ってからも1週間くらい咳が引かなくて大変だった。

*1:行き先から目的はお察しください