Search
Categories
Articles
Rainmeter関連
ファイル置き場
お知り合いなど

スポンサーサイト

--.--.-- | スポンサー広告

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Rainmeter] Rainmeter 2.1

2011.09.28 | Rainmeter

0 Comments

2.1もやっと正式版となりました。

自分の担当した部分は前回同様、負荷軽減および、新規追加機能のバグ取り(調整)がメインです。負荷軽減はほぼ前回の記事の通りです。起動速度はかなり速くなったと思います。あとは記事に書いたかどうか覚えてないけど、同じ画像を何度も使う場合には、その数だけメモリを消費せず、1つだけキャッシュして使いまわすようにしたので、場合によってはメモリ使用量も減ってるかもしれません。

メインとなるアップデート内容としては、NowPlayingプラグインやManageダイアログの追加でしょう。NowPlayingは自分では使ってないので割愛するとして、Manageダイアログは今までメニュー操作やファイル直接編集でしか弄れなかった設定をGUIで弄れるようになりました。一部の設定には対応してませんが(位置関連のアンカーや%指定など)、総じてユーザビリティは上がりましたね。

大きな変更点としては、開発環境をVC++2010へと移行したために、最低動作環境がWindows XP SP2以降となったことです。Windows2000やXP無印/SP1では動きませんので、環境を動かせない人は2.0が最終版となります。

 

早速2.2への動きも出てきました。
2.2では、メニュー項目やエラーメッセージ、ダイアログなどのマルチランゲージ化を始めるようです。言語ファイルを用意して切り替えるようなタイプではなく、現時点では、各言語用のリソースDLLを用意して差し替えて使うようになるみたいです。まだこれから仕様なども変わる可能性があるので、どうなるかわかりませんが、公式フォーラムこちらで作業が進められるようなので、興味のある方はどうぞ。

これに伴って(本当に伴う必要があるのかは疑問だけど)、Litestepのサポートを削るかもしれないようです。削ったところでパフォーマンスがよくなるわけでもないんですが、個人的にはLitestepのモジュールとして動作させるメリットが現状のRainmeterには乏しいと感じられるので、別にどちらでもいいかなという立場です。個人用で使っているRainmeterでは削って使ってますし(先にも書きましたが、元々Litestepを使ってないなら、削って何か変わるわけではないです)。

 

あ、そういえば公式サイトも2.1リリースに伴ってリニューアルされました。前回の黒背景はとても見辛くて好きになれなかったので、今回の変更は大歓迎です。とはいえ、やっぱりマニュアルはローカルでふるーいデザインの(0.14の頃の)ものを未だに使ってたりします。これがやっぱり一番見やすい!

[Rainmeter] スキン作成時に気をつけてること #2

2011.07.08 | Rainmeter

0 Comments

前回の記事に追記しようと思ったら、どうやらPC環境移行してからLive Writerがご機嫌ななめでちゃんと上書き投稿できないみたいなので、分割することにしました。
引き続き、思いついた「やっておくといいかも~」な項目を挙げておきます。

 

0) betaといえども結構stableなので、beta版も使ってみよう

ベータ版というとあまり普段使いするものではないという印象がありますが、Rainmeterに関しては、むしろベータ版が一番安定してるんじゃないかという罠があったりなかったり。
実験目的のベータリリースはそんなになくて、実際にはほとんどがバグフィックスや処理の改善なので、自分自身の中では最新安定版(マイナーリリース版?)という位置づけです(自分で使っているものも、最新のものに自分用の改造をマージして使っています)。一応互換性も維持されてますし、気になったらベータ版も使ってみてください。

2.1からは動作環境からWindows2000とXP無印/SP1が外されて、XP SP2以降が対象になります。

 

1) 更新の必要ないMeter=ImageやMeter=StringにはUpdateDivider=-1を指定する (※2.0以降)

内容が変わらない画像(ヒストグラムや時計の背景とか)やテキスト(ヘッダ文字とか?)はUpdate間隔での更新処理が必要ないことが多いので、UpdateDivider=-1をつけておくと負荷が減ります。この2つは使われる頻度もそれなりに高いので、効果もあると思います。

2) Pluginの指定はファイル名だけを指定する

Plugin=Plugin\WebParser.dll と書くと、必ず "Rainmeterのディレクトリ\Plugins\..\Plugins\WebParser.dll" という風に "..\" が付加されて扱われるので、Plugin=WebParser.dll とだけ指定しましょう。付加されたとしても同じパスを表すことには変わらないのですが、余計な処理が減ります。

 

以下はRainmeterを使う上でやっておくといいかも~な項目です。

1) Rainmeter.ini内の無駄なエントリは削除する (※2.1未満が対象)

前回の記事を書いたときにはあまり効果ないと思っていましたが、実際に処理時間を計ってみると、エントリ数が多ければ多いほど、あまり無視できないレベルの時間がかかってました。メモリの節約効果はほとんどありませんが、使っていないエントリを削除すると処理が省けるので、やっておいて損はないです。掃除の際は、今後使いそうもないものに限定して、くれぐれも注意して削除してください。一度削除すると、消した設定値は戻せませんので。

ちなみに、2.1では読み込み部に変更を加えたので、エントリを削除しなくても問題ないレベルの速さになりました。

[Rainmeter] Rainmeter 2.0

2011.02.07 | Rainmeter

0 Comments

さあ1.4正式版が出ましたよ……と思いきや、一気に繰り上がって2.0としてリリースです。
バージョンが繰り上がった理由としては、C#プラグインが使えるようになったことと、Luaスクリプトがサポートされたことなど、機能的なものもありますが、Rainmeterの開発がGoogle code上で始まってちょうど2周年ということも個人的には大きかったのかなと思います。

2.0においては、そういった大きな新規能の追加がなされたものの、個人的には機能追加よりも、細かなバグ修正や既存機能の改善と安定性の向上に焦点を当てて取り組みました。前々回前回の記事に書いたようなリソース・負荷軽減がメインです。

1.2と1.3では、機能の追加に伴い、まずはとりあえず動くコードを書いていましたが、次第に冗長になったり、無駄にリソースを使っていたり、そもそも必要な処理じゃなかったりといった部分が出てきました。コミットログを見ると、ほとんどがそういったコードの掃除です。

負荷軽減で効果的だったのは、前回の記事にある!RainmeterUpdateなどの追加もそうですが、それよりも大きな効果があったのは、内部で使用しているバッファ用ビットマップのフォーマットを32ビットARGBから32ビットPARGBに変更したことです。Pは乗算済みアルファ(Premultiplied alpha)であることを表していて、そちらを使ったほうが処理が速いようです。スキンの大きさにもよりますが、描画負荷は3/4~1/2ほどに軽減されました。元々はGDIでのDIBSectionを使った高速化を考えていて、その過程でわかった副産物でした(乗算済みアルファというものを知らなかった)。

今のところ、次は何をしようといった考えはありませんが(メジャーバージョンアップもしたし)、細々とした改善は続けようと思います。とりあえず、Lua関連のコードはもう少しどうにかなると思うんだ……。どういうものなのかの調査から始めないと。

[Rainmeter] スキン作成時に気をつけてること

2010.12.18 | Rainmeter

0 Comments

たまにはスキン作成自体のお話を……と言っても、自分自身ではほとんどスキンを作らないので、凝ったTipsなんてものはありません。プログラムの関係上、ここはこうしたほうが効率的かも~というTipsをいくつか挙げておきたいと思います。「○○しない」と書いてある場合、してはいけないという意味ではなく、できるならそうしないほうがいいという意味で捉えてください。

1) むやみにDynamicWindowSize=1を使わない

DynamicWindowSize=1が設定されていると、Update間隔ごとに全Meterの位置・サイズを計算し直して、ウィンドウのサイズが変わらないかどうかチェックします。もし最初からウィンドウサイズが変わらないようにスキンが設計されているのであれば、この処理は無駄になります。
DynamicWindowSize=1を指定しないとウィンドウサイズは固定のままなのかというと、そういうわけでもなくて、!RainmeterShowMeterやMoveMeterなどのMeterの位置やサイズを弄るbangを使うことで再計算フラグが立ち、必要であればウィンドウサイズが変更されます。ただし、DynamicVariablesを使っていると、bangを使わずにMeterの位置やサイズが変わる可能性があるため、再計算が起こらないと困ることになります。素直にDynamicWindowSize=1を指定しておいたほうがいいでしょう。
余談ですが、アニメーションスキンを作る場合にも、ウィンドウサイズは固定にしておいたほうがいいです。ウィンドウサイズの縮小→拡大→縮小が発生するようなスキンだと、→縮小のときは問題ないのですが、→拡大のときに非常に遅くなります。

2) Backgroundを使わない

BackgroundMode=0と3ではBackground=に指定した画像を背景として扱いますが、それ以外に、「R255,G0,B255」(紫)や透明な領域をクリップする(ウィンドウのリージョンを切って、変形ウィンドウを作る)という処理が入ります。さらにDynamicWindowSize=1が指定されていると、場合によってはこの処理がむちゃくちゃ重くなります(透明不透明が斑模様になるようなスキンとか)。
BackgroundMode=0はウィンドウのサイズを画像サイズに固定、=3では特殊なスケーリングと、代用手段がないものでもありますが、こだわらないならMeter=Imageで代用しちゃってもいいと思います。
(※Rainmeter 1.4 betaには、Meter=ImageにBackgroundMode=3と同じスケーリング機能を追加してあります。BackgroundMarginsと同じように、ScaleMarginsを設定してください)

3) BackgroundMode=2を使わない

BackgroundMode=2は指定色で背景を塗りつぶすモードです。そのためだけにウィンドウサイズ分の画像バッファを作成し、メモリを消費します。必要なサイズが640x480だとすると、約1MBほどの消費です。Meter=ImageでSolidColor=を使って塗りつぶす場合はバッファを作らないので、BackgroundMode=1でMeter=Imageを併用したほうがメモリ消費量を減らせます。
わざわざバッファを用意していた理由はわかりませんが、グラデーション効果を使ったときに多少なりとも負荷がかかるので、毎回描画するよりはバッファに描いて、それを再描画時に使ったほうが軽かったのかもしれません。一応、処理時間もチェックしてみましたが、直接描画とバッファ描画でそれほど変わらないどころか、グラデーションを使わないなら直接描画したほうが速かったので、今は直接やっちゃったほうがいいのかもしれません。
(※Rainmeter 1.4 betaではバッファを作成せずに直接描いて、メモリ消費量を減らす方向に調整しました)

4) Meter=Stringで固定文字列のみを表示するときは、Text=ではなくPrefix=を使う

MeasureNameを設定せず、固定文字列のみを表示するときには、例えばText="blah blah blah"と書くよりは、Prefix="blah blah blah"としたほうが効率的です。Text=は%1などのMeasure値を混ぜたいときのみに使います。
たまにMeasureNameが設定されていて、かつTextに"%1"のみを書いているスキンを見かけますが、無駄な処理が入るので指定しないほうがマシです。

5) SolidColor=はどのMeterでも使える

Meter=Imageでしか使えないと思っている人もいるっぽいので、一応。どのMeterでも矩形塗りつぶしに使えます。StringにActionを設定したいときに、SolidColor=0,0,0,1を設定してよく使います(透明に見える不透明で、当たり判定を付ける)。
分かりやすい色を付ける事で、Meterのサイズをチェックする用途にも使えます。

6) Unicodeを活用する

以前にも書きましたが、スキンファイルの文字コードにはUnicode (BOM付きのUTF-16LE)も使えます。個人的に使う分には問題は起きにくいですが、日本語を含むShift-JISのスキンを他言語版Windows上で動かすと文字化けしてしまいますので、そういった用途ではUnicodeにしてしまいましょう。海外で配布されている欧文スキンでも、たまに日本語版Windowsで動かすと文字化けすることがあります(Gnometer旧バージョンのFeedsに定義されてたSubstituteとか)。多バイト文字を含む場合だけでなく、文字コード上の問題もいろいろと解決してくれるので便利です。
ただ、なんでもかんでもUnicode化すればいいのかというと……文字コードの関係上、Shift-JISで1バイトの文字でもUnicodeでは2バイト使うわけで、ファイルサイズも単純に2倍近くになってしまいます。個人的には、どっちでもいいときはShift-JISのままにしてあります。

 

以下はRainmeterを使う上でやっておくといいかも~な項目です。

1) 使わないスキンファイルは退避させておく

スキンの作成とは関係ありませんが、Rainmeterは起動時やRefreshAll時に、Configsメニュー用のキャッシュ作成や、スキン読み込み用のファイルパスなどを全てキャッシュするために、スキンフォルダ内の全.iniファイルをチェックします。スキンフォルダには最低限のものだけ残して、後は退避させておくと、ほんの少しですがファイル探索処理量とメモリ使用量を減らせます。
同様に、Rainmeter.ini内の無駄なエントリを削除するのも効果がある……ような気がして今まで削ってたんですが、こっちはプログラム上はあまり効果ないかもしれません。気分的にスッキリする程度です。

2) ログは(普段使いでは)オフにしておく

ログ出力を有効にしていると、ログを書き出している間は若干ですがパフォーマンスが下がります。スキン作成時や調査時以外では、ログ出力をオフにしておく(またはログファイルを削除しておく)といいと思います。スキンによってはUpdate毎にエラーが出っぱなしになっていることもあって、資源的にも精神衛生上もよくありません。

 

……もう少しくらいあるかな~と思ってたんですが、少なかったですね。
どれもこれも、「これをすると良くなる!」と断言できるものではないので、いろいろ試してみてください。

[Rainmeter] Rainmeter 1.3

2010.12.15 | Rainmeter

0 Comments

バタバタしているうちにRainmeter 1.3も正式版が出ちゃってました(遅。

できるならば、開発をしながらその都度記事をまとめていけるといいんですが、なにぶんコードを書いてるときはそっちに集中してるし、フォーラムでやりとりしてるときは英語のことで頭がいっぱいだし、他のこともやってるし、Twitterでのつぶやき程度で満足しちゃうしで、にんともかんとも。

今回の更新も、ブログテンプレートを変更して気分転換しつつ書き出そうかーなんていう魂胆です。

さて、1.3では1.2の時と同様に、かなりのバグフィックス・新規能の追加を行いました。時間が経ってて、何をやったか自分でもあまり思い出せないのですが、ピックアップすると、

- コンテキストメニューの変更
- Skin/Measure/MeterにGroup機能を追加
- MouseOverAction/MouseLeaveActionの発動方法を修正(キビキビ動くように)
- WebParserに文字参照のデコード機能を追加

あたりでしょうか。

文字参照のデコード機能は、以前の記事にあるものをベースに、数値文字参照だけでなく実体参照もデコードするように変更したものです。ただし、カスタムプラグインとは違い、1.3を入れただけで解決するというわけではありません。公式に取り込むにあたり、これまでに配布されてきたスキンとの互換性を維持するために、デフォルトではオフになっています。スキン製作者または使用者側で設定を追加して有効にする必要があります。

具体的には、"StringIndex="を指定しているMeasureに、"DecodeCharacterReference=1"を追加します。設定値は1以外に、以下の値が指定できます。

0 : なにもしない (デフォルト動作)
1 : 数値文字参照と実体参照の両方をデコードする
2 : 数値文字参照のみをデコードする
3 : 実体参照のみをデコードする

公式スキンセットであるGnometerでは1を使うように対応されていますので、参考にしてみてください。なお、公開しているカスタムプラグインはそのうち撤去しますので、ご了承ください。

Group機能は以前からどうにかできないかなと思っていた機能でした。スキンファイルの中を覗くと恐ろしいくらいに連なっている!RainmeterShowMeter / !RainmeterHideMeterを見るたびに、これがまとめられたらなーと思ってました。MeterStyleとの併用で、定義も楽になると思います。

同じようにどうにか……と思っていたのが、MouseOverActionとMouseLeaveActionの問題。MouseOverActionはいいとして、MeterのMouseLeaveActionは正常に発動しないことがあるので、[Rainmeter]セクションに書いておく回避策を使ったスキンが多いです。これを本来の「Meterから出たら発動」するように修正しました。正式版での仕様に至るまでには、いろいろと試しては修正を繰り返し……。Buttonでの挙動も修正する必要があるし、今までの使い勝手から違和感のない挙動にする必要もあるしで、かなり大変でしたが、最終的にはそう違和感なく仕上がったはずです。

副産物というわけではありませんが、今までよりも厳密にOver/Leaveを判定するようにしたので、特にMouseLeaveActionの発動がもたつかなくなりました(今までは500ms間隔のタイマーで判定していた)。

 

自分の担当外でもいろいろな機能が追加されました。ToolTip機能やAboutダイアログの修正、新プラグインの追加などなど。さらに次期メジャーリリースではC#で書かれたプラグインが追加されたり、スクリプト機能としてLuaが組み込まれるなど、いろいろと大きな変化がありそうです。反面、Rainmeter自体が太ってきてしまっているため、"ダイエット"もさせつつ、ぼちぼちやっていく予定です。

[Rainmeter] Rainmeter 1.2

2010.07.20 | Rainmeter

0 Comments

更新間隔開きすぎですね。Twitterで適当につぶやいてるほうが楽なので、どうにもブログ更新をサボりがちになる悪循環です。
そんなこんなでもやもやしている間に、Rainmeter 1.2がリリースされました。もう先月の話になってしまった上に、すでに1.3のベータが出ているというアレレ?な状況ではありますが!

1.2の正式リリース版でも、1.1同様にインストーラ版とzip形式版がそれぞれ用意されていますので、お好きなほうを公式サイトからダウンロードしてお使いください。詳しい更新内容はこれまた前回同様、kenz0さんのところを参照されるとよろしいかと思います。

1.2では1.1の頃とは違い、結構な量のコードを書いたなぁと……。マルチモニタ対応コードもそうだし、Aero対応もそう。どうやったら動くのかなぁと、コード例の検索や実環境での動きを調べながら、試行錯誤の連続でした。「誰かがやってるだろう/解決してるだろう」とコード例を探してみても、検索ワードのピックアップが悪いのか、あまり見つけられないし、見つかっても未解決な事例が多いし。なんとか実装してみたとはいえ、それぞれがスマートな方法ばかりではないので、いつかまた動かなくなるようになることもあるかもしれませんが、現状はひとまずよしということで。

もちろん、新機能のほとんどは自分の手だけで実装したわけではありません。フォーラム内での要望からピックアップしたり、非公開の開発者用セクションで意見を出し合って、実例を作っては修正したりといった手順を踏んで実装されたものがほとんどです。当然、ほぼ英語でやりとりする必要があるわけで、自分にとってはとてもハードルの高いものでしたが、簡単なやりとりであればなんとかなってきたかなと。もちろん、どう伝えていいかわからなくて疲れちゃったりすることもありますが。

そんなこんなと、いろいろありはしますが、使っている人に「Rainmeterって使いやすくなったな」って感じて貰えたら、苦労した甲斐があったなってもんです。そうだといいな。

さて、自分でコードを書いた中で一番大きなものは、やはりマルチモニタ対応です。Aero対応も大きいといえば大きいのですが、"Show Desktop"の判定処理を環境依存なコードにしすぎているので(というか正攻法が用意されていない)、次点です。あっ、CPUのマルチコア対応やVista以降のネットワーク対応もそれなりに大きいといえば大きいかな?
逆に(逆ではないけども)、一番「失敗したかな」と思ったものは、画像処理系のコードです。失敗したというか、早まったなって感じですね。ImageAlphaとか。設定項目やその実装方法についても、しっかり後のことを考えずに実装してしまっているので、拡張性が悪いコードになってしまったなぁと。GDI+の挙動にも泣かされました(他の部分でも「以前のバージョンと比べて表示が変わった!」っていうのはほぼGDI+の挙動のせいです)。総じて気になる部分はいろいろあったものの、あまり提起せずそのまんまいっちゃったのも悪かったなぁ。特にスキンに関する部分は「互換性の維持」という頭の痛い問題がついてまわるので、しっかり考えないと。

一方、自分で書いてない部分で興味があるのは、#CRLF#の追加と、なんといってもGnometerが追加されたことでしょう。Enigmaはあまり好きになれなかったんですが、Gnometerはいいですね。Bar上にClock、Systemといったものを"Snap to Edges"でぺたぺたと貼り付けていくだけで綺麗に並んでくれるし、Meterの項目が多いものはポップアップにも対応しているし。さらに高機能な設定ツールもついてきて、最近のスキンはいたれりつくせりで便利になったなーなんて思いました。標準添付にすることについては少し反対意見もあったりはするのですが(スキン自体の更新がRainmeter自体の更新と配布のタイミングが一緒になってしまうから)、新規ユーザのスタートアップとしてはいいんじゃないかなと思います。でも、やっぱり「使う」だけでなく、ぜひ「作って」欲しいですね。やれることはGnometerやEnigmaが用意している機能だけではないんだぞーということで。

1.2がリリースされたことで、開発自体はあんまり休む間もなく1.3へと突入してしまいましたが、1.3ではコンテキストメニュー項目の並びなどをもっと直感的なものへと修正したり、Meter/Measure/Skinのグルーピングを実装してShowMeterなどのBangがいくつも連なるようなActionを書かなくてもよくなるような機能を追加したりする予定です(というか、もう追加されてベータも出てますね)。自分の担当以外では、ツールチップ機能も追加されてますね。1.2の頃とは違って、最近は新たな開発者も増えたし、アドオンが担当してくれる範囲も増えて本体側を修正する負担も減ってきたので、できればのんびりモードでいきたい……な(願望)。

Rainmeter 1.2 (beta) #2

2010.04.09 | Rainmeter

0 Comments

また広告がでちゃったので更新。

前回の記事を書いた頃にはそろそろ正式版のリリースもあるのかなーと思っていたんですけど、案外かかってますね。あとbetaのリリースサイクルも短くなってて、新しいもので6つ目(r369)です。beta buildというよりは、ある種、nightly buildといった感じですね。修正内容をチェックしてもらうためのものと、新機能の内容をチェックしてもらうためのものとが入り混じってて、安易に最新betaを使ってねとはいえない状況のはずですが、実際には(新しいスキンの要求環境も、動作自体の安定性も)beta基準になっちゃってます。

前回書いた追加や修正の内容から増えたものとしては、Windows Vistaや7のAero環境で"On Desktop"を使えるようになったことと、MeterStyleや@include使用時に変な挙動をするバグの修正とか。

今のところ、(修正がなかなか難しいものを除いては)認識しているバグは結構潰せたと思っているのですが、なにぶん自分はスキン製作者ではないので、バグに気づかないことが多いです(使ってるスキンも、WebParserは一切使ってないし、基本的な機能のものしか使ってない)。もし今まで使ってたスキンが(Rainmeterのバージョンを変更する事で)動かなくなったりするものがあれば、教えてください。修正できそうであれば修正しておきます。

« Prev Page Next Page »

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。