Message PHP
[Homepage] [Script Top] [Administrator]

2016-12-11 の記事 - 2016-12-11
TPP・カジノ・福祉カットの3つが最重要課題。どこまで堕ちたのでしょうか、この国は。国民が民主主義に対する不断の努力を怠ったらどうなるか、見本を示しているかのようです。

最近のWindows 10で困り果てているのが、アップデートで勝手に接続帯域を全部持って行ってしまうこと。普通こういうのはユーザーの邪魔をしないように行うか、許可を得て行うか、最悪でも進行状況の確認や一時停止が可能な通知を出すくらいはすべきですが、そんなものはおかまいなしに妨害ばかりしてくれます。邪魔になり次第タスクマネージャから片づけていますが、迷惑千万です。
そんな極めて困ったWindows 10で有用なものの一つが、ライブタイル機能でしょう。重要なものならトースト通知(効果音とともにアクションセンターに出てくるアレ。「トースト通知」やら「ハンバーガーメニュー」やら、なぜ食べ物の名前が多いのでしょう)を使うとして、さして重要でもないものでいちいち通知を出されてはうっとうしいことこの上ありません。スタートメニューのライブタイルであれば、押し付けられることもなければ読み飛ばすことも少なく、読み飛ばしそうならタイルのデザインやサイズを工夫することで対処でき、「トースト通知はいらないが見逃したくはないもの」を広くカバーすることができます。
ただ困ったことに、初期状態のWindows 10のライブタイルは異常にケバケバしいため、逆にうっとうしい機能だと誤解されがちではあります。無理もありませんが。逆に、自分にとって最適なものを自分で作ってしまえば、これがなかなか便利なのです。

それで、データが定期的に更新されるライブタイルの作り方ですが、最低限この3つ(とロゴ画像)だけ用意すればよいので実に簡単なものです(見事な落とし穴がありましたが。これは後述)。

1.browserconfigファイル。デフォルト名はbrowserconfig.xmlだが、名前は何でもよい。
2.タイルに表示する内容を記述したXML。これは動的に変化しなくては意味がないので、プログラムによって自動生成させるか、あるいはサーバーサイド言語によってXMLを吐き出すようにする。
3.browserconfigの場所をmetaタグで指定したHTMLファイル。中身はどれほどぞんざいでも構わない。

あとはEdgeでHTMLを開き、スタートメニューにピン留めしてやるだけです。

まずbrowserconfigですが、この辺に解説があります。ごくシンプルに書けば
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
  <msapplication>
    <tile>
      <square150x150logo src="(中サイズタイル用のロゴの場所)" />
      <TileColor>#0078D7</TileColor>
    </tile>
    <notification>
      <polling-uri src="(タイル内容のXMLの場所)" />
      <frequency>30</frequency>
      <cycle>0</cycle>
    </notification>
  </msapplication>
</browserconfig>
といったところ。ロゴはpngなりなんなりの画像を適当に用意すれば可。サイズはタグ名からして150x150とされていますが、少々違っても動きます。たぶん。
通知のfrequencyは読み込み間隔(分)を指定するもので、説明では「30, 60, 360, 720, or 1440」とされています。ここでは通知が正しく更新されることを手早く確認するため、30としました。
cycleはタイル内容のURIが複数ある場合の挙動を指定するもので、今回は1つしか用意しないので0(どのサイズのタイルに対しても内容の切り替えをしない)としました。

お次はタイル内容のXMLですが、これはバージョンによって方法や自由度にかなり違いが出ています。
Windows 8対応の書き方をするならこの辺り、Windows 10ではより自由度の高い記述が可能とされています。無論、8の書き方は10でも動作します。
ひとまず10用に簡単に。なお、本来ならこのXMLはサーバーサイド言語なりに生成させるはずのものですが、ここではひとまず普通のXMLとします。
<?xml version="1.0" encoding="utf-8"?>
<tile>
  <visual>
    <binding template="TileMedium">
      <text hint-style="title">Hello!</text>
      <text>Hello World!</text>
    </binding>
  </visual>
</tile>
HTMLはごく簡単で、適当なHTMLのhead中に次の一行を入れるだけ。なお、名前としてbrowserconfig.xmlを使っている場合には、勝手に読みに行ってくれるため、これを書く必要すらありません。
<meta name="msapplication-config" content="(browserconfigの場所)" />
最後にEdgeからこのHTMLを開き、スタートメニューにピン留めするだけです。正しくピン留めできたら、タイル内容のXML内のテキストを適当に変更して30分ほど放置してみて、ライブタイルが更新されたようなら成功です。

さて、これで原理上は動作するはずですが、私のApacheにファイルを配置して動かしてみても全く動作しませんでした
どこか間違ったかと散々駆けずり回って探しましたが、何をやっても全くダメ。もうどうしようもなく、とりあえず適当なサーバーにアップロードしてみたところ、なんとその場合は動作するではありませんか。
つまり、どうやらこの方法ではlocalhost上のものをピン留めさせても正しく動作させられないらしいのです。世の中、サーバーサイドプログラムを書いてlocalhost上に置き、自分用の環境として利用している人は多いはずですが、これが不可能だというのです。なんたる悪質な嫌がらせでしょうか。

ちなみにUWPを使えば、localhost上からもタイル内容を問題なく取得することができます。お手軽さは完全に消滅しますが。これはまたいずれ。


左:スタートメニューにピン留めした後、通知が読み込まれるまでの様子。browserconfigで指定したロゴが表示される。
中央:通知を読み込んだ後の様子。
右:タイル内容のXMLのテキストを書き換えてアップロードし、30分ほど待った後の様子。