デスクトップにRSSのニュースを一行表示するRainmeterスキンを作成しました。
このスキンはFeedRollerというソフトをモチーフにRainmeterのスキンとして置き換えたものです。
オリジナルはソフト名からも分かるように、ヘッドラインがロールアップしていく使用ですが、もちろんこのスキンにはそういったギミックは加えていませんので、このスキンを「ティッカー」と呼ぶことはできないと思います。
さて、機能としては登録したRSSのアイテムをひたすら60件、順次切り替え表示しているというだけのもので、タイトルをクリックすると該当記事にジャンプします。
登録RSSは最大で10件まで可能で、それらを混ぜ合わせ新しい記事順に60件表示するような仕様になっています。
これを実現するために、今回はYahoo! Pipesを使用しました。
スキンは直接、登録サイトのRSSを参照するのではなく、Yahoo! Pipesで加工処理された独自のRSSをソースとして参照することになります。
ここで使っているMixFeed for RainmeterというPipeはオリジナルで作成したもので、以下のようなプロセスで独自のRSSを作成するものです。
これはサイト上で入力しても使えますが、スキンで使用しているようにRESTでリクエスト送信してやればRSSとして返してくれます。
例えば、朝日新聞と読売新聞のフィードを混ぜて20件出力とするには次のようになります。
(続けて、...&u3=http....&u4=http....、というようにu10まで10個のURLを指定できます)
このPipesはすでに一般公開しているので、そのスキンでの利用以外でももちろんOKです。
もともと、このスキンのためだけに作成したものではなく、ある程度汎用性を考えているため活用範囲は広いと思います。
また、Yahoo! Pipesのアカウントをもっている方でしたら、クローン(コピー)を作って自由に改変できるので、興味のある方はカスタマイズいていただけたらと思います。(それを自分のPipesとして公開することも可能ですよ)
ちなみにYahoo! Pipesは一度リクエストのあったURLのキャッシュを10分間保持して、繰り返し同じリクエストに対してこのキャッシュを返す仕様になっています。
したがって、指定元が更新されてもそれが反映されるには最後のリクエストから最低10分は間をおくことが必要です。
このスキンでは基本的に一回の切替が10秒単位で、それが一周60回の実行されるので、それにあわせて600秒(10分)ごとに全体のソース取得更新が行われるようになっていますが、個人的には少し早いような気がするので、スキン全体のUpdeta値を3000に設定しています。
その結果、切り替わりスピードは30秒、全体の更新は1800秒(30分)という設定になっています。
スキン全体のUpdeta値を遅くしたことで、立ち上がりのもっさり感は否めませんが、切り替えスピードと全体の更新の帳尻を合わす面倒な計算が省けます。
遅いと感じる方はこのUpdeta値を1000とかにすればいいだけですが、前述のように同じキャッシュを取得したり、そもそも指定元サイトの更新がない場合には、同じ内容が繰り返し表示されることになるかもしれません
さて、このスキンのもう一つのポイントとしては、新機能の「DynamicVariables」を効果的に使って大幅にスキンをシェイプアップしている点です。
以前にも「スキンファイル軽量化のヒント」と題して、軽量化の方法を取り上げましたが、今回はまた違ったアプローチを用いています。
従来、このような表示切替を行う場合の常套策としてShow/Hideを用いるのが一般的です。
つまり、60種類のメーターを順次切り替えていくには、60個のメーターを作ってそれを一個づつ表示/非表示としていくやり方です。
また、これには必然的に、切り替えの実行をさせるためのカウンターが相当数必要になってきます。
今回のスキンだと、タイトルと概要、時間、サイト名が1つのセットで、位置もサイズも色も全部同じ設定で、唯一メジャーネームだけが異なることになるメーターを60セット作らなければなりません。さらにこれを切り替えるためのカウンターも60個必要です。
同様に新機能として追加された[MyStyle]を活用すればメーターの共通部分をまとめることができるので、かなりのシェイプアップになりますが、メーターを300個作らなければならないことには変わりません。
しかしDynamicVariablesを使えば根本的に1セットのメーターで済むのです。
つまりメーターに割り当てられるメジャー自体を動的に変えてやればいいのです。
各メジャーにふってある番号はカウンターで実行される時間を表しています。
このカウンターは、10カウントで1、20カウントで2というような計算処理(実際にはUpdateで調整していますが)が行われ、カウントアップされた瞬間にその番号のメジャーがメーターに当てはめられるという仕組みです。
具体的には「!RainmeterSetVariable」で変数がその都度置き換わり、各メーターの「Text=」に仕込んである変数がそれに連動します。
そして「DynamicVariables=1」を与えてることで根本的な挙動が変わり、「Text=」の文字列を単なる文字列としてではなくメジャーで得られた実際の値に置き換わるというわけです。
このような効率的は方法で飛躍的にスキンをスリム化することができました。
さらにメーター同様にメジャーもと云いたいところですが、こちらはDynamicVariablesがプラグインに未対応なので今の所は無理です。しかし、対応したとしても、同じような理屈が通用するかは疑問ですが...
最後に、今回のポイントは何といっても「Yahoo! Pipes」と「DynamicVariables」に尽きます。
Yahoo! Pipesは普段個人的にはよく利用するものの、公開するのは初めてで、実際どの程度の利用に耐えられるシロモノなのかは不明で、今回はそのテストという意味合いもあります。
DynamicVariablesに関しては、非常に利用範囲の広い機能で、アイデア次第によっていろいろな活用の仕方ができることで、今後ますますこの機能を生かしたスキンを作って生きたいと思います。