2008/09/13(Sat)バッチファイルで時計表示

2008/09/13 17:56 Software::Windows
あるステータスをバッチファイルで延々流し続けたいときに、パッと見て、その行のレコードが何時何分何秒のデータかを分かりやすくしたかったので、バッチファイルで時計を表示するコードを書いてみた。

とまぁこれが、結構面倒で^^;
time /Tコマンドでは、秒まで出てきません。
秒は%time%という変数を使うことまで1/100秒単位までご丁寧に出てくれるのですが、はっきり言って無駄…

で、これを使わざるをえないことに。
結構XPだったり2000だったりで出力に差があるらしいのですが、ここはXP x64 SP2ベースで書きます。
自分の場合は、24時間制で0補完済みの2桁ごとで区切られた数が得られたので、「あぁ、substringかけるだけじゃん~」と思ったら……

実は厄介でした。0の扱いが。
先頭に0がついた、06といった数字は、8進数の6を表すような解釈をするらしく、秒の部分だけを切りだして変数に入れる(set /aでは式の評価が行われる)と、システムの時計が8秒と9秒のとき、"無効な数字です"と文句を言われます。

というわけで、結構苦肉の策。
@echo off
set n=-1
:LOOP
set /a t=%time:~6,1%
if %t% == 0 (set /a s=%time:~7,1%) else (set /a s=%time:~6,2%)
if %s% == %n% goto LOOP
set /a n=%s%
echo %time:~0,8%
goto LOOP
実行結果
17:53:40
17:53:41
17:53:42
17:53:43
17:53:44
17:53:45
17:53:46
17:53:47
17:53:48
17:53:49
…
もっとスマートに書けるのかもしれんが……。あぁ、とりあえず外部アプリのsleep.exeとか、JSを開く手はナシで。
ちなみに、ping -n [止めたい秒数] localhost >NULという書き方も紹介されてましたが、なんか1秒置きにうまく動いてくれませんでした。


まったくもって、Linuxのbashは賢すぎる。
あっちなら
echo -e "`date "+%Y/%m/%d %H:%M:%S"`"
なんて手軽に書ける。曜日や"1日前"、なんてのもお茶の子さいさい。
あぁ、こんな表現使うの久々…(笑)

2008/09/12(Fri)BSOD 0x35 NO_MORE_IRP_STACK_LOCATIONS with KIS 解決法

2008/09/12 21:20 Software::Windows
BSOD中間まとめで書いたが、このKaspersky Internet SecurityとWindowsファイル共有が相性悪くて、BSOD 0x35 NO_MORE_IRP_STACK_LOCATIONSで止まる件について解決法が分かった。
この話がマイナーな事を考えると、Windows XP x64 SP2限定の話で、x86には全く関係ないのかもしれない。

MSKBを探し回った結果

0x35エラーが引っかかったが、ドメイン参加ではないのでドメインにログオンしようとすると、「 STOP 0x00000035 NO_MORE_IRP_STACK_LOCATIONS」エラー メッセージを表示することがあります。は関係ない。
SP2も適応済みであり、mup.sysのバージョンは公開されているパッチよりもずっと新しかった。

mup.png


Kaspersky Laboを探しまわった結果

このエントリが引っかかって、
I should also mention, I tried changing HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Klif Start key to 2 (currently still set that way), and that did not help. I then added to HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters an IRPStackSize key, started at 15, ran it up to 50, but that also did nothing.
というのがあったので、ダメ元で、
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KLIF]
"Start"=dword:00000002
に変更。元々は、
"Start"=dword:00000001
でした。
このStartの値が何を示すかというのは、MSKBによると0x01の方が0x02よりローレベルな段階で起動する模様。
ゆえに、エラーが起こった時はKernel Panic=BSODとなるわけですか…。ふむ。

とりあえず、結果からいえば、これで直った。
この変更を加えても、一応Firewallは正常に動作しているようで、未定義のルールについてはちゃんと警告出してきているし、Sambaのやり取りも問題なくなった。


一件落着。
今回はBSOD系のエラーでも、すごくマイナーな物だったから余計に苦労したな…。

追記 2008/09/15

x86にKIS7をインストールしている場合でもStart=0x01だが、こちらはBSODにならない。
ということは、x64環境の場合だけの問題のようですね。

追記 2008/12/03

しばらく使ってたら、また青くなった。
今度は、ここを変更してみた。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kl1]
"Start"=dword:00000002
現状とりあえず安定しているようなので、↑でダメだった人はやってみてください。

2008/09/12(Fri)LoadAverageが50!?

2008/09/12 19:06 Software::Linux
この間、調子乗ってsftp3本張ってガンガン転送させながらPerlいじってたら、どんどんノロくなって、あれ?おかしいな、と思ったら、サーバーHDDのLEDが点灯
あ、こりゃまずいと思った時には、SSHの操作を受け付けるのが非常に困難に。

しばらく待ってたら、だんだん落ち着いて、topコマンドが入るようになったので、見てたけど、なにやら起動したPerlアプリのメモリが70%食ってるとかありえない表示になってたり。おかしいなぁ、そんなに酷い処理は書いてないんだけど…。

とりあえずkillallで該当Perlにkillをかけてから、sftpが収まるのを待ってようやくスムーズに。
後でサーバーの保守ログから作成したグラフを見て驚いたwこれはすげぇ…、Load Average 50いってたんだ。しかもswapの減り方が……。あぁかわいそう。
そんなに忙しいにもかかわらず頑張ってグラフ描いてくれたんだね、偉い偉い。*1

080904-load-hour.png

080904-swap-hour.png


まあ再起動することなく、おさまってくれてよかったです。
ちなみにおかしな挙動をしたPerlモジュールは変更せずにもう一回実行しても、↑のようなハングは起きませんでした。sftpのせい??

# 余談ですが、Linuxのsftpコマンドだけでレジューム転送ってどうやるんだろう?man調べたけどよく分からなかった。

*1 : まぁ白く抜けてる所は、さすがに処理してる暇がなかったんでしょう…。

2008/09/12(Fri)Safari+VLCで快適ストリーミング再生

2008/09/12 15:42 Software::Macintosh
私はお気に入りのmp3ファイルを、サーバーの私用スペースに置いておき*1、出先などでhttpストリーミングで聞くことが多いのだが、MacでiTunesを使うと、ちょっと具合が悪くて困っていた。

というのが、いちいち再生する毎にプレイリストにガンガン項目が増えていくこと。
サーバー上のmp3は頻繁に追加したり削除したりするので、別にプレイリストに増えて欲しくないのである。
しかも追加されたところで、日本語タグが化けて読めたものじゃない……。ほんとタグの面は特にiTunesはサイテーである。

で、適当なプレーヤーを探していたのだが、これまた私がMacに疎いからかあんまりよさげなものが見つからない。

やっと探し当てたのが、VLCメディアプレーヤー
日本語タグも化けず、きちんと再生できる。おぉ……。

で、SafariからワンクリックでVLCに再生したくなったのだが、その方法に少々迷ったのでメモ。
なお、サーバー側は
Content-Type: audio/mpegurl
Content-Disposition: inline; filename=stream.m3u
というヘッダーを吐くように設定。(シャッフルしたプレイリストをcgiで自動生成させているため、そのままでは.cgiという拡張子になってしまう。MacのSafariだと。WindowsのIEとかは問題なし。)
無論、この設定でWindows上のWindowsMediaPlayerやWinampは問題なく、ワンクリックでプレーヤーが起動し再生する。m3uはテンポラリに入るだけ。

▼適当にm3uを保存して、"ファイル"メニューの"情報を見る"を開く。
mac_streaming_1.png


▼"このアプリケーションで開く"をVLC.appに設定し、"すべてを変更"をクリック。
mac_streaming_2.png


▼Safari側は自動的に開くように設定
mac_streaming_3.png


はぁ、Windowsとは関連づけの方法が全然違うんですね…。拡張子の一覧があって、そこから選ぶようなのが便利だなあ。
特にブラウザのMIME設定によって保存するとかしないとかの設定が欲しい。
▼こんなやつ
folder_options_m3u.png



しかし、この方法にも欠点があって、ダウンロード先のフォルダにm3uがstream.m3u, stream1.m3u, stream2.m3u…という風に溜まりまくってしまいます。
定期的に掃除でいいかな?

何かいい方法ありますかね…。

*1 : アクセス制御はもちろんしている