2009 . 03 . 21

画像取得の更新タイミングをコントロールする

bijin-tokei (美人時計) for Rainmeter

先日ブログでも取り上げたbijin-tokei(美人時計)の画像を表示するRainmeterスキンをリリースしました。


今回の製作のポイントは、「更新のタイミング」ということです。

画像の変化で時を知らせる以上、時間に伴った画像の更新でなければなりません。

単にWebparserの更新間隔を60秒に設定するのでは、現在秒との関連が一切ないわけで、0秒の時に現在分の画像に切り替わるように関連付けるための工夫をしなければなりません(後述、結果的にはあまり意味ないんだけど)。


まずは、[SECONDS]セクションで秒を取得するメジャーを一つ作り、一定の秒数になったらWebparserを働かせるような仕組みをとります。

アクセスしてから画像が返されてそれが表示されるまでを逆算して、毎分50秒になったら[SOURCE]セクションを有効化してアクセスを開始するようにします。

(「Disabled」は付けないとこで、立ち上げ時のみは秒にかかわらず、すぐにアクセスします)



こちらの取得元サーバーは頻繁にビジーになることが多く(トラフィックが多いせいか)、画像の取得に失敗することも少なくなく、ここら辺の対策もしておく必要があります。

前述の[SECONDS]セクションで開始された[SOURCE]セクションは、[IMAGE]セクションに連動してここで無事に画像取得に成功すると、同時に「FinishAction」によって無効状態になり、次に[SECONDS]セクションによって有効化されるまで待機するようになります。

一方、画像取得に失敗した場合には、「FinishAction」が起こらずに[SOURCE]セクションで設定した「UpdateRate=10」によって、10秒後にリトライを開始します。

これで画像が1回で取得できれば60秒間隔で、できなければ、できるまで10秒毎にリトライを繰り返す仕組みが形成されるというわけです。


さて、ここまでやや理屈っぽいこと述べてきましたが、アクセスするタイミングをいかに正確にしたとしても、相手のサーバーの状態やユーザーの通信環境によって、画像が表示されるタイミングはマチマチなのが現実で、冒頭の「0秒時に現在分の画像に切り替わるために云々」というのはあくまで理想でしかありません。


しかし、今回使った手法のように、何らかのメジャーの値によって、Webparserをスタートさせたり、また、パースやダウンロードが完了したらWebparserを無効状態に切り替えるテクニックは知っていると役立つかもしれません。


豆知識

[IMAGE]セクションに設定したUrlは、[SOURCE]セクションのもので、[IMAGE]セクションは[SOURCE]セクションに依存した関係が成り立ちます。

このように親セクションに依存した子セクションは、親セクションが無効化されると、同時に子セクションも無効状態になります。

また、「UpdateRate」も親のものが適用されるため、省略して構いません。


余談

残念ながらこの美人時計、世界進出は今のところ考えていないのか日本時間版と米東部時間版の2種類しかありません。

ワールドワイドなサービスならこのスキン、Customize.orgにでも投稿したいところでしたが残念。

このコンセプトはきっと海外ではウケると思うんですが....