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

スポンサーサイト

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

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

[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-dev] TwitterのTLが文字化けする

2010.08.17 | Rainmeter-dev // Issue/互換性問題やバグ修正

21 Comments

TwitterでRainmeterについて検索してみると、TwitterのTLを表示させると文字化けするっていうつぶやきがちらほらと見受けられます。
RainmeterでTwitterのタイムラインを取得すると、「はじめまして!」のような文字列が表示されてしまいますが、これは数値文字参照と言って、文字を10進数または16進数文字列で表しています(これは「はじめまして!」を表す)。本来は表示前に元の文字へと戻してやる必要があり、ブラウザなどではその処理をしてから表示していますが、RainmeterのWebParserにはその処理が入っていません(英語圏では変換して使うような文字があまりなく、そう問題にならないので)。

この数値文字参照を元の文字に戻す処理を加えたWebParserを作ってみたので、下へ置いておきます。変なことはしてないので、1.0でも使えると思います。興味のある方は試してみてください。

Rainmeter 1.3にこの変更を取り込んだので、公開終了しました。
デフォルトでは有効化されませんので、スキン製作者側または使用者側で適宜設定を行ってください。

適用方法)
WebParserを使っているMeasureで、かつ"StringIndex="を設定してあるものに、"DecodeCharacterReference=1"を設定してください。

例)

[Feed1.mLink1]
Measure=Plugin
Plugin=Plugins\WebParser.dll
Url=[Feed1]
DecodeCharacterReference=1
StringIndex=2

設定値)

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

※Substituteの設定値によっては意図しない結果になることもありますので、適宜調整してください。
(例えば、結果の文字列からダブルクォーテーションを消すためにSubstitute=""":""を指定してあった場合、DecodeCharacterReferenceを定義することによって&quot:は"に置き換えられてしまうため、消されずに残ってしまいます)

また、この件とは関係ありませんが、TwitterのBASIC認証が廃止されたために、TLが取得できなくなって困った方もおられると思います。これに関しては、GnometerがSuperTweetを介しての取得に対応していますので、そちらのコードを参考にしてみてください。

■更新履歴
2010.12.16 : 公開終了しました。
2010.08.17 : Rainmeter 1.3 beta r501 をベースに作成し直しました。処理も少しだけ変えているので、r320版と文字処理の動作が違っていたら教えてください。

続きはコード詳細。

続きを読む »

[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の頃とは違って、最近は新たな開発者も増えたし、アドオンが担当してくれる範囲も増えて本体側を修正する負担も減ってきたので、できればのんびりモードでいきたい……な(願望)。

テスト投稿

2010.07.20 | 雑記

0 Comments

PCを組み直したので、ちゃんと投稿できるかテスト。

続きを読む »

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のバージョンを変更する事で)動かなくなったりするものがあれば、教えてください。修正できそうであれば修正しておきます。

Rainmeter 1.2 (beta)

2010.03.07 | Rainmeter

0 Comments

未更新時の広告を消すために更新!
いろいろと書きたい記事はあるものの、書くとなると少し気力がいるので(?)、またキリがよくなったタイミングで更新したいと思います。

と、それだけじゃアレなので。
Rainmeter 1.2のbeta版がちょこちょこと出ています。1.2での修正・変更・追加点には、このブログでも書いてたマルチモニタ関連や、Vista/7でネットワークの値がおかしくなってた分の修正や、まだ記事にはしてないCPU使用率のマルチコア対応など、いろいろと入る予定です。他にもIMAGE meterでの画像処理とか(色操作、フリップ、回転など)も入ってます。あと何が追加されるのかわかりませんが(自分の追加候補は今のところなし)、正式版が出るまでそう時間はかからないと思うので、楽しみに(?)お待ちください。

Twitterの数値文字参照の件も、整理してオプションとして追加できたらいいのかなと考え中。表示することを考えるなら、実体参照も一緒に置き換えるほうがいいのかもしれないけど、むやみに置き換えるとRegExpにも影響するからどうしようか……。それに実体参照いろいろありすぎ。

« Prev Page Next Page »

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