- 作者:宮本 常一
- 発売日: 2009/06/08
- メディア: オンデマンド (ペーパーバック)
- 作者:瀬戸 晴海
- 発売日: 2020/01/16
- メディア: 新書
驚異の量子コンピュータ: 宇宙最強マシンへの挑戦 (岩波科学ライブラリー)
- 作者:啓祐, 藤井
- 発売日: 2019/11/20
- メディア: 単行本
驚異の量子コンピュータ: 宇宙最強マシンへの挑戦 (岩波科学ライブラリー)
覚えたら何かすごく便利な気がするので勉強を始めてみた。取り敢えず5chのスレを覗いてみると話が高度過ぎてついていけない。考えてみればLuaは元々C/C++の組み込みなのでそっち方面の人間ばっかりが集まってるのか。まあいいや、何か難しい事がしたい訳でもなくRainmeterをより楽にしたいだけだし。
Luaの最新は5.3だがRainmeterで使用可能なLuaのVerは5.1。ちょっと触ってみた感想はLua単体だと出来る事は少ない。元々がCの組み込みなのでLua単体だと低機能。ややこしい事はCの方でやれという発想なんだろう。それはまあ別にいいが正規表現の実装が独特。いわゆるPerl準拠とはかなり違う。ここらはリファレンスを熟読しないと間違いの元。
さて、Python辺りのScript言語を使うのと何が違うのかというと一つはパッケージとして配布する事が出来るという点だがまあこれは殆どの人には関係ない事だろう。もう一つはRainmeterのBangを使えるという事。つまり実行結果をMeterに面倒なく反映できる。Pythonだと一旦txtに書き出してそれをWebParserで読み取る等の作業がいる。RainmeterにおけるLuaの存在意義はほぼこれのみだと個人的には思う。
[MeasureName] Measure=Script ScriptFile=MyScript.lua
これはLua scriptをロードするだけで実行は!CommandMeasureで行う。詳細は下記。
これでLua scriptに引数を与える事が出来る。
[MeasureName] Measure=Script ScriptFile=MyScript.lua MyOption=Hello, world!
Lua script内でSELFオブジェクトを通じてMyOptionを得る事が出来る。
!CommandMeasureを使ってLuaコードを実行できる。
!CommandMeasure "MyScriptMeasure" "MyFunction()"
!CommandMeasure "MyScriptMeasure" "a = b; print(SKIN:ParseFormula('(2 + 2)'))"
Rainmeterは「"」しか認識しないので引数内で使うなら「'」を使う事。
Initialize関数が定義されている時skinがloadまたはrefreshされた時1回だけ実行される。これはscript Measure自体が無効になっていても実行される。!SetOptionで実行scriptを変更した時も実行される。ちなみにdofileを使えばimportと同様の事が出来る。
function Initialize() dofile(SKIN:GetVariable('@').."MyDoFiles\\toolkit.lua") dofile(SKIN:MakePathAbsolute("toolkit.lua")) end
Update関数が定義されている場合Script Measureが更新されるたびに実行される。
function Update() MyVariable = "Hello, world!" return MyVariable end
Update関数の返り値はScript Measureの返り値となる。
printを使用する事
print("The current value of MyVariable is: " .. MyVariable)
SKINオブジェクトは自動的に生成される。
Method名 | 引数 | 概要 |
---|---|---|
GetMeasure | MeasureName | 指定された名前のMeasure objectを生成する。ない場合はnilを返す。MyMeasure = SKIN:GetMeasure("MeasureName") |
GetMeter | MeterName | 指定された名前のMeter objectを生成する。ない場合はnilを返す。MyMeter = SKIN:GetMeter("MeterName") |
GetVariable | VariableName Default |
ここでDefaultは任意。ユーザー定義変数の値を返す。ない場合はDefaultで与えられた値を返しDefaultが与えられてない場合はnilを返す。MyVariable = SKIN:GetVariable("VariableName", "n/a") |
Bang | BangName BangArg1 BangArg2 ... BangArgN |
Bangを実行する。BangArg1以降はBangの引数。someVar = 12 |
MakePathAbsolute | File/Folder | 相対Pathをskinフォルダからの絶対Pathに変換する。MyPath = SKIN:MakePathAbsolute("MyImage.png") |
ReplaceVariables | String | 変数を含む文字列を処理する。Section変数も有効。MyString = SKIN:ReplaceVariables("The value of MyVariable is #MyVariable#.") |
ParseFormula | FormulaString | 数式の結果を返す。数式でない場合はnilを返す。Rainmeterの組み込み関数は括弧で括る必要がある事に注意する事。numToRound = 239.78 |
Measure objectはGetMeasureを使用して生成する。
MyMeasure = SKIN:GetMeasure("MeasureName")
Method名 | 引数 | 概要 |
---|---|---|
GetValue | Measureの値を数値で返す。MyMeasureValue = MyMeasure:GetValue() |
|
GetStringValue | Measureの値を文字列で返す。MyMeasureValue = MyMeasure:GetStringValue() |
|
GetOption | OptionName Default |
ここでDefaultは任意。Optionの値を文字列で返す。Optionが存在しない場合はDefaultを返し未指定の場合は空白を返す。MyGroup = MyMeasure:GetOption("Group", "None") |
GetNumberOption | OptionName Default |
ここでDefaultは任意。GetOptionと同じだがこちらは数値で返す。MyUpdateDivider = MyMeasure:GetNumberOption("UpdateDivider", 1) |
GetName | Measure名を文字列で返す。MyMeasureName = MyMeasure:GetName() |
|
GetMinValue | Measureの最小値を返す。MyMeasureMin = MyMeasure:GetMinValue() |
|
GetMaxValue | Measureの最大値を返す。MyMeasureMax = MyMeasure:GetMaxValue() |
|
GetRelativeValue | Measureの値を0.0-1.0間の%値として返す。当然MinValueとMaxValueに依存する。MyMeasureValue = MyMeasure:GetRelativeValue() |
|
GetValueRange | Measureの値の範囲つまりMinValueとMaxValueの差を返す。MyMeasureRange = MyMeasure:GetValueRange() |
|
Disable | Measureを無効にする。MyMeasure:Disable() |
|
Enable | Measureを有効にする。MyMeasure:Enable() |
SELFオブジェクトは自動的に生成される。全てのMeasure objectはSELF objectでも有効。
MyScriptMeasureName = SELF:GetName()
Measure objectはGetMeterを使用して生成する。
MyMeter = SKIN:GetMeter("MeterName")
Method名 | 引数 | 概要 |
---|---|---|
GetOption | OptionName Default |
ここでDefaultは任意。Optionの値を文字列で返す。Optionが存在しない場合はDefaultを返し未指定の場合は空白を返す。MySolidColor = MyMeter:GetOption("SolidColor", "000000") |
GetName | Meter名を文字列で返す。MyMeterName = MyMeter:GetName() |
|
GetX | Absolute | ここでAbsoluteは任意。X座標を返すのだがAbsoluteがtrueの場合絶対値を返す。MyX = MyMeter:GetX() |
GetY | Absolute | ここでAbsoluteは任意。Y座標を返すのだがAbsoluteがtrueの場合絶対値を返す。MyY = MyMeter:GetY() |
GetW | Meterの幅を返す。MyW = MyMeter:GetW() |
|
GetH | Meterの高さを返す。MyH = MyMeter:GetH() |
|
SetX | X | MeterのX座標を与える。Referenceには書いてないが当然引数を指定する必要がある。MyMeter:SetX(100) |
SetY | Y | MeterのY座標を与える。MyMeter:SetY(100) |
SetW | W | Meterの幅を与える。MyMeter:SetW(100) |
SetH | H | Meterの高さを与える。MyMeter:SetH(100) |
Hide | Meterを非表示にする。MyMeter:Hide() |
|
Show | Meterを表示する。MyMeter:Show() |
次のLua Libraryは現在はRainmeterでは使用不可。
Script MeasureのSectionVariable経由でLua内関数を実行またはLua内の変数を取得できる。関数を実行した場合SectionVariableの値は当然関数の返り値となる。今のところ実行できるのは関数のみでLua Statementを単独で実行は出来ない。
[&ScriptMeasureName:LuaFunctionName(numberParameter, 'stringParameter', ...)] [&MeasureMyScript:myVariable]
以下はいくつかの注意点
[Rainmeter] Update=1000 AccurateText=1 DynamicWindowSize=1 [MeasureGetUserName] Measure=Plugin Plugin=SysInfo SysInfoType=USER_NAME UpdateDivider=-1 [MeasureScript] Measure=Script ScriptFile=SimpleLua.lua Disabled=1 [MeterWelcome] Meter=String FontSize=20 FontWeight=400 FontColor=255,255,255,255 SolidColor=47,47,47,255 Padding=5,5,5,5 AntiAlias=1 Text=[&MeasureScript:GetWelcome('[&MeasureGetUserName]')] DynamicVariables=1
function GetWelcome(inArg) hourOfDay = tonumber(os.date('%H')) if hourOfDay < 12 then greetingText = 'Good Morning' elseif hourOfDay < 17 then greetingText = 'Good Afternoon' else greetingText = 'Good Evening' end welcomeText = greetingText..', '..inArg return welcomeText end
この例は特に解説なんか必要ないがScript MeasureがDisabledとなっているのはUpdate関数もないし返り値も使われてない為Measure自身は動いている必要はないので。
人体、なんでそうなった?:余分な骨、使えない遺伝子、あえて危険を冒す脳
詳説 日本仏教13宗派がわかる本 (The New Fifties)
天皇はなぜ紙幣に描かれないのか: 教科書が教えてくれない日本史の謎30
youtube-dlではbilibiliが動かないので仕方なくAnnieとやらを使う事にしたが、どうもドマイナーなソフトらしく日本語の情報が皆無。仕方ないのでまた使い方をまとめる事にした。
面倒な事は何もないがバイナリはReleasesページから。
なんでも分割された動画は自分でくっつける必要があるらしい。勝手にやってくれないのか。
ファイルのリネームを自動でやりたい。具体的にはURLの一部分をファイル名に取り込みたい。この程度は必ず出来るはずだと思うがやり方が分からない。設定をつらつら眺めてるとパッケージャーとやらで何か出来そうな気がする。なるほど規則の適用条件と設定内容を決めるのか。設定内容の中にファイル名というのがあるしダイナミック変数というのも出てくる。きっとこれだ。しかしダイナミック変数の中にURLがない。暫くいじってもよく分からないので5chの該当スレッドをみると同じような質問が出ててURLを設定しないから出てこないんだとある。条件部分のダウンロードURLとかソースURLの事かしら。ちゃんとソースURLを指定してるけど出てこないぞ。またまた適当にポチポチしてたらやっと分かった。つまりワイルドカード部分を変数として使うのね。つまり
example.com/*
などとすると
<jd:source:1>
というのが使えるようになる。また
example.com/*/*
という指定の仕方をすると
<jd:source:1> <jd:source:2>
と2つ使えるようになる。
いやいやこれはヘルプか何かがないと分からんよ。
日本人が知るべき東アジアの地政学 ~2025年 韓国はなくなっている~
以前から思ってたけどデータ用のHDDがヤバそう。なんせSandyおじさんなのでいっそおニューのRyzenマシンでも買うかとちょっぴり思ったがブラウザと専ブラが動けばそれでいいという程度の用途なので現状特に不満はない。ちなみに2500kにメモリ4Gという煽り対象にジャストフィットなスペック。電源は以前交換してるので平気なはず。なのでOS用HDDとセットでSSDにするついでにメモリの増設という計画を立てた。
買ったSSDは以下の物。正直データ用がSSDである必要は全くないのだが少しでもPCが静かになるかと思って。
【国内正規代理店品】Western Digital WD Blue 内蔵SSD 2.5インチ 3D NAND 採用250GB SATA 3.0(SATA 6Gb/s) WDS250G2B0A
【国内正規代理店品】Western Digital WD Blue 内蔵SSD 2.5インチ 3D NAND 採用 1TB SATA 3.0(SATA 6Gb/s) WDS100T2B0A
買ったのは以下の物。別に4Gでも困らなかったが何せ今はメモリが安いのでついでにという感じ。ちょっとどうかなと我ながら思うけど16Gで6000円という値段には勝てなかった。しかし一時期は16Gで2万円とかしてたから劇的に安くなったね。
CFD販売 デスクトップPC用 メモリ PC3-12800(DDR3-1600) 8GB×2枚 240pin DIMM (無期限保証)(Panram) W3U1600PS-8G