Hatena::Groupretla

Klein*Klein RSSフィード

2015年11月09日

rtmpdumpでらじるらじるを録音するタイマースクリプト

| 01:05 | はてなブックマーク - rtmpdumpでらじるらじるを録音するタイマースクリプト - Klein*Klein

radikaの更新が止まり、らじるらじるのサーバー仕様変更に対応できていないため、NHKの番組が録音できないことが増えてきた。なので、保険としてrtmpdumpで録音することもできないかと思って、AutoHotkeyでGUIを作ってみた。

局、開始日時、録音時間、曜日、ファイル保存先を設定して、iniファイルに予約設定を保存する。保存した予約は、スクリプトが常駐していれば予約時間に実行される。AutoHotkeyでタイマー回してるだけだから、スリープしてると復帰しない。まぁradikaの保険として運用してるうちは、radikaが復帰させてくれるから問題ない。

指定できる局には、らじるらじるの3局の他、超A&G+も入れてみた。これを指定すると動画ファイルとしてのflvが保存される。

内部的には、1秒ごとに開始日時と現在日時を比較しているから、録音開始が最大1秒弱遅れる。なので、開始と終了に秒単位のマージンを設けた。


追記(2015/11/10)

iniファイルのロード時にNHKの番組表をダウンロードして、番組名を録音ファイルの名前に指定できるようにしてみた。

適当な実装だから不具合出てくるかもしれないけど、しばらく使ってみる。

トラックバック - http://retla.g.hatena.ne.jp/retla/20151109

2014年09月22日

日時からUNIX時間(エポック秒)を算出するダイアログ

| 21:00 | はてなブックマーク - 日時からUNIX時間(エポック秒)を算出するダイアログ - Klein*Klein

前にUNIX時間(エポック秒)変換関数を晒してみたが、今回はダイアログで日付と時刻を指定して、それに対応するエポック秒を表示・クリップボードにコピーするGUIを作ってみた。

こんなもん何に使うんじゃーと思うかもしれないが、あれだ、はてなダイアリーにおける投稿時刻の改ざんとかそんなん。はてなダイアリーは予約投稿できないわけだが、せめて投稿時刻の表示だけは指定時刻にしておきたいという乙女心。表示だけ改ざんしても投稿時刻は変わらないから、人を呼びやすくなるとかそういう効果はない。

ググればすぐに出てくるような機能だけども、ホットキーで呼び出せれば楽なので作ってみた。

#+@::
	Gui, Ep:New, +LabelEp, エポック秒算出
	Gui, Ep:Add, DateTime, vDateTime gD2E w200, yyyy/MM/dd HH:mm:ss
	Gui, Ep:Add, Edit, vEpoch ReadOnly w200
	Gui, Ep:Add, Button, gEpCopy, コピーして終了
	GoSub, D2E
	Gui, Show
Return
D2E:
	GuiControlGet, EpNow, , DateTime
	EnvSub, EpNow, 19700101090000, Seconds
	GuiControl, , Epoch, %EpNow%
Return
EpCopy:
	Clipboard := EpNow
EpEscape:
EpClose:
	Gui, Ep:Destroy
Return

ホットキーは適当にWin+Shift+@を当てておいた。適宜変更。

「コピーしないで終了」というボタンはない。コピーしたくなければ閉じるボタンかEscapeキーで終了する。

トラックバック - http://retla.g.hatena.ne.jp/retla/20140922

2014年06月19日

指定時間でアラート/シャットダウンするAHKスクリプト

| 14:15 | はてなブックマーク - 指定時間でアラート/シャットダウンするAHKスクリプト - Klein*Klein

以前作ったタイマーは無駄にごちゃごちゃしていたし、経過時間の指定だけで時刻指定ができなかったので、作り直した。

実行時期の指定は、分単位での経過時間と時刻。実行動作は、警告ダイアログによるアラート、シャットダウン、ハイバネート、スリープの4つ。入力に応じて実行時期の指定方法のチェックが移るようにした。

デフォルトの動作は面倒の少ないアラートだけど、他の動作がよければ"Checked"を適当に書き換えて使えばいい。


前のと違ってタイマーが動作中かどうかを表示する機能がないので、うっかりスクリプトの再起動とかしてたら、タイマーが止まったことに気付かなくなるけど、まぁその辺は諦める。

それと、このタイマーは1秒単位でしか判定してないから、最大1秒弱の誤差が生じる。

#Esc::
	Gui, Kt:New, +LabelKt, キッチンタイマー
	Gui, Kt:Add, Edit, vKtSpan gKtSpan w50 Number, 
	Gui, Kt:Add, DateTime, vKtTime gKtTime x+5 w150 1, yyyy/MM/dd HH:mm:ss
	Gui, Kt:Add, GroupBox, xs Section w205, 時間指定方法
	Gui, Kt:Add, Radio, vKtTypeA xs+10 ys+15 Checked, 指定分後に実行
	Gui, Kt:Add, Radio, vKtTypeB, 指定時刻に実行
	Gui, Kt:Add, GroupBox, xs Section w205, 動作
	Gui, Kt:Add, Radio, vKtAction Checked xs+10 ys+15 Section, アラート
	Gui, Kt:Add, Radio, , ハイバネート
	Gui, Kt:Add, Radio, ys, シャットダウン
	Gui, Kt:Add, Radio, , スリープ
	Gui, Kt:Add, Button, gKtOK xs-10 y+15 w100 Default, OK
	Gui, Kt:Add, Button, gKtCancel w100 x+5, Cancel
	Gui, Kt:Show
Return
KtSpan:
	GuiControl, Kt:, KtTypeA, 1
Return
KtTime:
	GuiControl, Kt:, KtTypeB, 1
Return
KtOK:
	Gui, Kt:Submit
	If (KtTypeA = 1 && KtSpan)
		SetTimer, KtExec, % KtSpan * 60 * -1000
	Else If (KtTypeB = 1 && KtTime)
	{
		EnvSub, KtTime, %A_Now%, Seconds
		If (KtTime < 10)
			Msgbox, 指定時刻が早すぎます。`n10秒以上先を指定してください。
		Else
			SetTimer, KtExec, % KtTime * -1000
	}
KtCancel:
KtClose:
KtEscape:
	Gui, KT:Destroy
Return
KtExec:
	If (KtAction = 1)
		MsgBox, 8240, アラート, 指定された時刻となりました。
	Else
	{
		MsgBox, 4097, Shutdown, タイマーを実行します, 10
		IfMsgBox, Cancel
			Return
		If (KtAction = 2)
			DllCall("PowrProf\SetSuspendState", "int", 1, "int", 0, "int", 0)
		Else If (KtAction = 3)
			Shutdown, 1
		Else If (KtAction = 4)
			DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0)
	}
Return
トラックバック - http://retla.g.hatena.ne.jp/retla/20140619

2013年08月18日

robocopyのGUIをAHKで作ってみた

| 18:55 | はてなブックマーク - robocopyのGUIをAHKで作ってみた - Klein*Klein

robocopyは、Windows VistaあたりからWindowsに標準搭載されているコピー・バックアップソフト。

強力なコピー機能を備えていて、同期(ミラーリング)なんかも簡単にできるので、慣れると非常に便利。

ただ、CUIしか用意されていない上、コマンドラインオプションも数が多いので、いちいち手打ちしようと思うと大変。RichCopyというMS社員が作ったGUI版もあるけど、あえてAutoHotkeyでrobocopyのオプションを設定するためのGUIを作ってみた。理由は次の4つ。

  • せっかくrobocopyがあるんだからそれを使いたい
  • robocopyの方が高速らしい
  • RichCopyは正確にはrobocopyとは別物のソフトで、全くの同機能というわけではない
  • これからもrobocopyが採用され続けるなら、robocopyに慣れておいて損はない

オプションはかなり網羅的に並べたつもり。

入力した内容は名前を付けて保存しておけるので、それを呼び出せばいちいち手打ちせずに同じコピーができる。

ぎるぎる2013/09/04 06:29StorageMaker(ver 2.2.3)とOwakonDiary頂いて行きます(*ノωノ

トラックバック - http://retla.g.hatena.ne.jp/retla/20130818

2013年08月09日

XMLで保存する日記ソフト

| 17:47 | はてなブックマーク - XMLで保存する日記ソフト - Klein*Klein

AutoHotkeyで作った。といっても、中身はMSXMLを呼び出して使ってるから、AutoHotkeyでやってることなんてGUI部分くらいなんだけど。

元々しばやん日記を使っていたけど、いくつか不満があった。

  1. 保存ファイルが1日1ファイルなせいでデータフォルダのファイル数が膨大になる
  2. プレーンテキストで保存されないので一括編集ができない
  3. エクスポートはできるがインポートはできない

そこで代替ソフトを探してみたが、どうにもいいのがない。というか、BLOGとかWIKIが普及しすぎて日記ソフト自体がほとんどない。

そんなときにAutoHotkeyでXMLを扱うことができると分かったので、自分で作ってみることにした。

XMLのいいところは、テキストエディタ等で扱えるので一括編集が可能なところと、メタデータも保存できるので最近のメモソフトへの移行がしやすいところ。

これに加えて、1年1ファイルで保存できて、全日記データから検索できれば言うことなし。

XMLに触れるのは初めてだったが、まぁ何とかなった。色々間違ったやり方もしてるかもしれないけど、とりあえず希望通り動いてる。


調子に乗ってXSLまで書いてみた。

やってることはマークアップというよりスクリプトだったので、理解はしやすかった。けど再帰的処理のところで引っかかった。

記述は正しいはずなのに、apply-templatesでテンプレートを適用する時に、何故かwith-paramでパラメータが渡せない。散々悩んだけど、以下のページに同じ疑問が質問されてて、それに対する回答を試したらあっさり解決した。

要するに、ルートノードとして"/"でマッチングするんじゃなくて、"/root"みたいにルート要素名をちゃんと指定しないといけないらしい。どうも、記述的には間違いではないし実際別の環境では動くらしいので、バグか何かなのかもしれない。これは言われなきゃ分からん。

トラックバック - http://retla.g.hatena.ne.jp/retla/20130809