今月の読書日記

考えるナメクジ ―人間をしのぐ驚異の脳機能

考えるナメクジ ―人間をしのぐ驚異の脳機能

  • 作者:松尾 亮太
  • 発売日: 2020/05/21
  • メディア: 単行本(ソフトカバー)
教科書には書かれていない江戸時代

教科書には書かれていない江戸時代

  • 作者:山本 博文
  • 発売日: 2018/08/17
  • メディア: 単行本(ソフトカバー)
中東政治入門 (ちくま新書)

中東政治入門 (ちくま新書)

PowerShell 5.1 公式Reference 自分用目次

PowerShellを覚える気はある。たぶん覚えたら便利なんだろうと確信している。しかし公式Referenceがうんこ。超見にくい。おまけに日本語がない。英語のみ。まあScript言語のReferenceが英語のみとかありがちではあるが仮にもMSの仕事だぞ。そこでせめて自分用目次を作ることにした。ところでWindows10に搭載可能なPowerShellは5.1だが6とか7もある。しかしこれはPowerShell Coreとかいう新しいマルチプラットフォーム版の事。どうしようかと思ったが取り敢えず基本の5.1で覚える事にした。

各種コマンドレット目次

CimCmdlets
CIM(Common Information Model)を取り扱う。Windowsで言うとWMIの事。

ISE

ISE(統合開発環境)を操作する。ISEというのはVisual StudioとかEclipseみたいな奴の事。これはあれほど大掛かりじゃないけど。

Microsoft.PowerShell.Archive

圧縮ファイルを扱うのだが今時zipのみ。

Microsoft.PowerShell.Core

PowerShellの基本機能を管理する。

Microsoft.PowerShell.Diagnostics

パフォーマンスカウンタ及びイベント関連。

Microsoft.PowerShell.Host

ホストプログラムからのデータを管理する。

Microsoft.PowerShell.LocalAccounts

読んで字のごとくローカルアカウント関連だが64bit上で動く32bit PowerShellでは動かないので注意する事。

Microsoft.PowerShell.Management

Windows管理関連。

Microsoft.PowerShell.ODataUtils

OData(Open Data Protocol)関連だが今のところ登録されてあるのは1つだけ。

Microsoft.PowerShell.Operation.Validation

Operation Validationだから文法チェックとか書式チェックとかの仕様の妥当性検証の事。

Microsoft.PowerShell.Security

Windowsのセキュリティ機能関連。

Microsoft.PowerShell.Utility

PowerShellの基本機能を管理する。Coreと違ってこちらはどちらかというと便利アイテム。

Microsoft.WsMan.Management

WS-Managementプロトコル関連。ネットワーク管理。

PackageManagement

パッケージ管理関連。

PowerShellGet

モジュール、DSC(Desired State Configuration)リソース、JEA(Just Enough Administration)ロール及びScriptの管理。DSCはWindows設定の自動化、JEAは管理者権限管理の仕組み。

PSDesiredStateConfiguration

DSC(Desired State Configuration)リソース関連。

PSDiagnostics

ETW(Event Tracing for Windows)トレース関連。

PSReadLine

ReadLine環境を扱う。キーバインド等をReadLine風にカスタマイズ出来る…らしい。

PSScheduledJob

スケジュールされたジョブを扱う。

PSWorkflow

ワークフロー関連。

PSWorkflowUtility

ワークフロー関連。

今月の読書日記

宮本常一が撮った昭和の情景 上巻

宮本常一が撮った昭和の情景 上巻

  • 作者:宮本 常一
  • 発売日: 2009/06/08
  • メディア: オンデマンド (ペーパーバック)
マトリ 厚労省麻薬取締官 (新潮新書)

マトリ 厚労省麻薬取締官 (新潮新書)

科学用語図鑑

科学用語図鑑

  • 作者:水谷淳
  • 発売日: 2019/01/26
  • メディア: 単行本

Rainmeterを使ってみようの巻 〜Lua Scripting〜

覚えたら何かすごく便利な気がするので勉強を始めてみた。取り敢えず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の存在意義はほぼこれのみだと個人的には思う。

Script Measure

[MeasureName]
Measure=Script
ScriptFile=MyScript.lua

これはLua scriptをロードするだけで実行は!CommandMeasureで行う。詳細は下記。

Options

これでLua scriptに引数を与える事が出来る。

[MeasureName]
Measure=Script
ScriptFile=MyScript.lua
MyOption=Hello, world!

Lua script内でSELFオブジェクトを通じてMyOptionを得る事が出来る。

!CommandMeasure

!CommandMeasureを使ってLuaコードを実行できる。

!CommandMeasure "MyScriptMeasure" "MyFunction()"
!CommandMeasure "MyScriptMeasure" "a = b; print(SKIN:ParseFormula('(2 + 2)'))"

Rainmeterは「"」しか認識しないので引数内で使うなら「'」を使う事。

Initialize

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

Update関数が定義されている場合Script Measureが更新されるたびに実行される。

function Update()
	MyVariable = "Hello, world!"
	return MyVariable
end

Update関数の返り値はScript Measureの返り値となる。

Log

printを使用する事

print("The current value of MyVariable is: " .. MyVariable)

Functions

SKIN object

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
SKIN:Bang("!SetOption", "MeterName", "Text", "Hello, world!")
SKIN:Bang("!SetOption", "MeterName", "FontSize", someVar)
SKIN:Bang("!UpdateMeter", "MeterName")
SKIN:Bang("!Redraw")
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
roundedNum = SKIN:ParseFormula("(Round("..numToRound.."))")
Measure object

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 object

SELFオブジェクトは自動的に生成される。全てのMeasure objectはSELF objectでも有効。

MyScriptMeasureName = SELF:GetName()
Meter object

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()

Restrictions

次のLua Libraryは現在はRainmeterでは使用不可。

  • LuaCURLの様なコンパイルされたライブラリ
  • require, os.exit, os.setlocale, io.popen, collectgarbage

Inline Lua

Script MeasureのSectionVariable経由でLua内関数を実行またはLua内の変数を取得できる。関数を実行した場合SectionVariableの値は当然関数の返り値となる。今のところ実行できるのは関数のみでLua Statementを単独で実行は出来ない。

[&ScriptMeasureName:LuaFunctionName(numberParameter, 'stringParameter', ...)]
[&MeasureMyScript:myVariable]

以下はいくつかの注意点

  • SectionVariableなんだから当然DynamicVariables=1が必要。
  • 関数の引数は引用符で括らないと変数扱いされる。
  • 関数の引数にtableを指定する事は出来ない。
  • nilを引数で指定する事は可能だが返り値とする事は出来ない。
  • tableをindex付きで引数に指定する事は出来ない。
  • skinの初回更新前はMeasureおよびMeterの初期値は0もしくは""が設定されるので注意する事とあるが関数の引数にMeasureの値をSectionVariableで引っ張ってくる場合の事。
[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)

詳説 日本仏教13宗派がわかる本 (The New Fifties)

  • 作者:正木 晃
  • 発売日: 2020/03/05
  • メディア: 単行本(ソフトカバー)
特攻隊員の現実 (講談社現代新書)

特攻隊員の現実 (講談社現代新書)

大奥のおきて 「女人版図」しきたりの謎

大奥のおきて 「女人版図」しきたりの謎

  • 作者:由良弥生
  • 発売日: 2007/09/27
  • メディア: 単行本(ソフトカバー)

Annieの使い方メモ

youtube-dlではbilibiliが動かないので仕方なくAnnieとやらを使う事にしたが、どうもドマイナーなソフトらしく日本語の情報が皆無。仕方ないのでまた使い方をまとめる事にした。

インストール

面倒な事は何もないがバイナリはReleasesページから。

使い方

コマンドラインから使うのでyoutube-dlと同じように

annieのpath [OPTIONS] URL [URL...]

てな感じで使う。

Option

-i
動画情報を表示する。利用可能なformatが出てくる。
-F string
urlをまとめて記述したtxtのpathを指定する。
-d
デバッグモードで実行する。
-j
諸情報をJSON形式で表示する。
-v
Verを表示する。
Download
-f string
downloadするstreamを指定する。-iで確認することが出来る。
-p
playlist内の動画全てをdownloadする。
-n int
同時download数を指定する。ただしマルチパート動画のみ。defaultは10.
-c string
cookieを指定する。
-r string
referrerを指定する。
-cs int
download時のchunk sizeを指定する。単位はMB。速度制限がかかるような場合に使う。
Network
-retry int
download時の試行回数を指定する。defaultは10。
Playlist
-start int
-end int
開始または終了するplaylist内の動画番号を指定する。
-items string
playlist内のdownloadする動画番号を1,5,6,8-10の様にカンマ区切りで指定する。
Filesystem
-o string
-O string
-oでdownloadするディレクトリを、-Oでファイル名を指定する。これは必ず分けて指定する事。-oでfull pathを指定すると怒られる。
Subtitle
-C
字幕もdownloadする。
Youku

youkuは使わないので意味が全く分からんがoptionにあるので一応掲載。

-ccode string
Youkuのccodeを指定する。defaultは0590。
-ckey string
Youkuのckeyを指定する。defaultは長いので省略。
-password string
Youkuのpasswordを指定する。
aria2

なんでも分割された動画は自分でくっつける必要があるらしい。勝手にやってくれないのか。

-aria2
RPCでAria2を使う。
-aria2addr string
Aria2のアドレスを指定する。(default "localhost:6800")
-aria2method string
Aria2のMethodを指定する。(default "http")
-aria2token string
Aria2のRPC Tokenを指定する。

JDownloader2 パッケージャのダイナミック変数の使い方

ファイルのリネームを自動でやりたい。具体的にはURLの一部分をファイル名に取り込みたい。この程度は必ず出来るはずだと思うがやり方が分からない。設定をつらつら眺めてるとパッケージャーとやらで何か出来そうな気がする。なるほど規則の適用条件と設定内容を決めるのか。設定内容の中にファイル名というのがあるしダイナミック変数というのも出てくる。きっとこれだ。しかしダイナミック変数の中にURLがない。暫くいじってもよく分からないので5chの該当スレッドをみると同じような質問が出ててURLを設定しないから出てこないんだとある。条件部分のダウンロードURLとかソースURLの事かしら。ちゃんとソースURLを指定してるけど出てこないぞ。またまた適当にポチポチしてたらやっと分かった。つまりワイルドカード部分を変数として使うのね。つまり

example.com/*

などとすると

<jd:source:1>

というのが使えるようになる。また

example.com/*/*

という指定の仕方をすると

<jd:source:1>
<jd:source:2>

と2つ使えるようになる。

いやいやこれはヘルプか何かがないと分からんよ。