UT-VPN

便利に使わせてもらってるUT-VPNなんですが、今日共有サーバからのファイルコピーが異様に遅いと思ってタスクマネージャを開くと、utvpnserverが超高負荷になってました。

コピーを止めたら負荷0。

がまんできないのでUT-VPNをオフラインにしたらコピーは快適に。

前々から発生してたかもしれませんが、今回特別ファイルサイズが大きかったので気づいたのかもしれません。

ギガビットでつないだLAN間コピーなんだからVPNは関係ないはずだけどどう設定すべきかわかりません。

Datula on Windows7(64bit)

個人的にとても好きなメーラーです。

HDDトラブルで再設定することになったのですが、前はすんなりできたのに今回はどうにもシリアルが有効になりませんでした。

いつも通り、展開されたフォルダごとコピーして「レジストリデータのバックアップ」しておいたレジストリを復元。setup(インストーラ)は実行していません。

データフォルダの場所はきちんと反映されているのに、Datulaを再起動するとシリアルが消えていて、しかも「40日経過してます」と言われます。

regeditで見るとVirtualStoreの中にキーがあったのでUAC絡みであると判断しました。

ローカルポリシーエディタでローカルポリシー→セキュリティオプション→ユーザアカウント制御の各ユーザの…仮想化を「無効」に変更し、PCを再起動しましたがまだダメ。

「reg flags HKLM\Software\OnSystems\Datula set DONT_VIRTUALIZE」を実行してもダメ。

Datulaを管理者権限で起動しシリアル入力するとやっと成功しました。

この後は管理者権限なしでもシリアルが有効でした。

一番最後の作業だけでいいのかもしれませんがどれかが複合的に作用したとも考えられます。

ちなみに一番最初のレジストリ復元後からHKLM\…\Datulaにシリアルがあることは確認してます。でもこれも仮想化による錯覚なのかもしれないですね。

Windows共有

「ログオン失敗: 要求された種類のログオンは、このコンピュータではユーザーに許可されていません。」

2台の同じPCで、一方はユーザログオンダイアログが出て、もう一方は上記メッセージ。

ローカルセキュリティポリシーの「ネットワーク経由でコンピュータへアクセスを拒否する」はどっちもGuestが入っている。

何が違うのかと調べたらGuestアカウントの有効無効でした。

Guestアカウントが有効で「ネットワーク経由で…」にGuestが設定されていると上記メッセージが出るようです。

Guestを無効にしてもユーザIDを入力するか、同一のユーザIDでログオンしてれば正常につながります。

Acronis True Image で snapshot read failed のエラー

サーバーの共有ファイルを毎日バックアップしているのですが、いつの頃からか決まって同じファイルで止まってしまい、お手上げ状態でしばらくはただのアーカイバでバックアップしてました。

久しぶりに原因究明再開です。

国内は情報皆無、海外の情報を探したところ、本家フォーラムに気になる情報が。

それは「ファイル圧縮」、NTFSプロパティで設定するアレです。

たしかにひっかかるファイルは、ただのエクセルなのに18MBもあり圧縮をかけてました。

圧縮を解除したところ、正常にバックアップが完了しました。

Windowsでradikoを録音

★用意するもの
perl以外は同じフォルダに入れちゃって下さい。

○wget
http://users.ugent.be/~bpuype/wget/ でいいと思う。
もしプロクシを使う場合は、同じフォルダに wget.ini を作成し、
http_proxy = 127.0.0.1:8080
https_proxy = 127.0.0.1:8080
な感じで記述

○rtmpdump
rtmpdump.exe libeay32.dll の2つ。ぐぐれば見つかる。

○perl
本家 activestate からダウンロード&インストールしてください。

○スクリプト(radiko_rec.pl)

use POSIX 'strftime';
use Compress::Zlib;
use MIME::Base64;
$outfilename = $ARGV[0].strftime("_%Y%m%d.flv", localtime);
$rectime = $ARGV[1]*60;
$ch = $ARGV[2];
$swf = "http://radiko.jp/player/swf/player_2.0.1.00.swf";
$player = "player.swf";
print "start\n";
system("wget -q -O $player $swf");
if (!-e $player) {print "get player fail."; exit;}
system('wget -q --header="pragma: no-cache" --header="X-Radiko-App: pc_1" --header="X-Radiko-App-Version: 2.0.1" --header="X-Radiko-User: test-stream" --header="X-Radiko-Device: pc" --post-data=\'\\r\\n\' --no-check-certificate --save-headers --tries=5 --timeout=5 -O auth1.txt https://radiko.jp/v2/api/auth1_fms');
if (-z "auth1.txt") {print "auth1 fail."; exit;}
open(IN, "auth1.txt");
$auth1 = join("", <IN>);
close(IN);
$authtoken = $1 if ($auth1 =~ /x-radiko-authtoken: ([\w-]+)/i) ;
$offset    = $1 if ($auth1 =~ /x-radiko-keyoffset: (\d+)/i) ;
$length    = $1 if ($auth1 =~ /x-radiko-keylength: (\d+)/i) ;
open(IN, $player);
binmode(IN);
sysread(IN, $buffer, 8);
sysread(IN, $buffer, 327985-8);
close(IN);
$buffer = uncompress($buffer) ;
$key = encode_base64(substr($buffer, 0x13370+$offset, $length), "");
print "authtoken: $authtoken \noffset: $offset length: $length \npartialkey: $key\n";
system('wget -q --header="pragma: no-cache" --header="X-Radiko-App: pc_1" --header="X-Radiko-App-Version: 2.0.1" --header="X-Radiko-User: test-stream" --header="X-Radiko-Device: pc" --header="X-Radiko-Authtoken: '.$authtoken.'" --header="X-Radiko-Partialkey: '.$key.'" --post-data=\'\\r\\n\' --no-check-certificate --tries=5 --timeout=5 -O auth2.txt https://radiko.jp/v2/api/auth2_fms');
if (-z "auth2.txt") {print "auth2 fail."; exit;}
print "authentication success\n";
system('rtmpdump -v -r "rtmpe://radiko.smartstream.ne.jp" --playpath "simul-stream" --app "'.$ch.'/_defInst_" -W '.$swf.' -C S:"" -C S:"" -C S:"" -C S:'.$authtoken.' --live --flv '.$outfilename.' --stop '.$rectime);

★使い方
radiko_rec.pl 保存名 時間(分) 放送局
例:radiko_rec.pl news 30 FMT
保存名の後に日付と拡張子(_YYYYMMDD.flv)が付きます。
7とXPと2000で動く、と思う。

ちょっとズルをすればperlは本体とdllの2コだけでいい。でもそれは著作権上グレーらしいので公開できない。
ウチで試したときactiveperlのインストールで@INCがうまく設定されなかった。perl.exeをPATHが通ってるからとパス省略しちゃだめなんだな。謎。あ、最初から関連づけに任せればよかったのか。

共有フォルダのアクセス権

社内で共有フォルダを作ったとき、ルールがないとトップフォルダにどんどんデータを置かれてしまう。
そこでNTFSのアクセス権を使って、トップフォルダのみ作成・削除ができないようにする方法。
条件としては、他PCからのアクセスはGuest扱いとし、作成・削除ができないのはトップフォルダのみでサブフォルダ以下はフルアクセスでよい。共有フォルダのあるPCからはフルアクセスできるようにする。

トップフォルダ自体のセキュリティ

  • Guest ファイルとフォルダの作成および削除を拒否、適用先「このフォルダとファイル」、「これらのアクセス許可をこのコンテナのみに適用」にチェック
  • Everyone フルアクセス状態から「サブフォルダとファイルの削除」の許可をはずす

トップフォルダにあるサブフォルダのセキュリティ

  • Guest 削除を拒否

サブフォルダ一つ一つに設定するのは面倒だが、こういう仕様らしい。

コマンドラインでやるにはxcaclsが利用できるようだ。

・Xcacls.vbs を使用して NTFS アクセス許可を変更する方法
http://support.microsoft.com/kb/825751/ja

≫cscript XCACLS.vbs [ディレクトリ名] /E /D GUEST:A /SPEC A

ワイルドカードが指定できるとあるが、全然ちがうアクセス権を設定されてしまったので1つずつ指定した方が確実。

GoogleDesktopSearchとfile://

社内の共有情報管理にwikiを導入したのですが、LAN内サーバ上のファイル(WORDやExcel)へのリンクをfile://でやると、基本的にはIEのクライアントウインドウ内に表示されます。

しかし、GoogleDesktopSearchだけは別ウインドウで開き、そりゃもう理想的な動作でした。

そこでどういうレスポンスを返しているのかいろいろと調べた結果、ファイルを開いているのはブラウザではなくGDSそのものだとわかりました。

ずるいよ。

GW-NS300N2-BK

Amazonであまりの安さにつられて買ってしまったPLANEX 11n Draft2.0/g/対応 高速300Mbps 無線LANカード(簡易パッケージ) GW-NS300N2-BK。フレッツ網内で80Mbpsオーバーを出して結構満足してます。

がしかし、サスペンド(スタンバイ・スリープ)からの復帰時が甘いようで時折リンクに失敗してします。無線LANの接続を付属ソフトからXP標準のものに変更すると若干減る感じがしますが、それでも時々失敗します。

カードを抜き差しすればまたリンクする、という方は以下の方法で抜き差ししないでカードを再起動させましょう。

  1. マイクロソフトからdevconをダウンロードします。圧縮されているので実行して解凍します。
  2. 解凍したdevcon.exeと同じ場所にバッチファイルを作り次の1行を書きます。
    devcon restart “@PCI\VEN_1814&DEV_0601&SUBSYS_ED122019&REV_00\5&2F8AD61&0&0028F0”
    もしかしたら@PCI以降は環境によって違うかもしれません。
    デバイスマネージャでカードのプロパティを開きデバイスインスタンスIDを確認してください。
  3. バッチを実行します。
    実行が確認できたらデスクトップにショートカットを置いたりランチャーに登録するといいでしょう。

WSHでUPnP対応ルータからWAN側IPを取得する

自宅サーバのアドレスをDDNSなどに登録する人向け、でしょうか。

Dim deviceFinder
Set deviceFinder = CreateObject("UPnP.UPnPDeviceFinder")
Dim devices, device, service
Set devices =  deviceFinder.FindByType("urn:schemas-upnp-org:service:WANIPConnection:1",  0)
'WANIPConnection がだめなら WANPPPConnection や InternetGatewayDevice を試してみて
For Each device In devices
For Each service In device.Services
If (service.ServiceTypeIdentifier = "urn:schemas-upnp-org:service:WANIPConnection:1") _
Or (service.ServiceTypeIdentifier = "urn:schemas-upnp-org:service:WANPPPConnection:1") Then
Dim ret, emptyArray(0), outArray(1)
ret = service.InvokeAction("GetExternalIPAddress", emptyArray, outArray)
WScript.Echo "ExternalIPAddress = " & outArray(0)
End If
Next
Next

XPでは「UPnPユーザーインターフェース」を有効にする。

2000はUPnPに対応していない?(DirectXを入れると動く?)

最初JScriptで作ろうとしたがInvokeActionの引数がVBArray型のため無理なよう。

消せないフォルダ

古いノートPCをたまに使います。WindowsXPです。

ふと、Dドライブ直下に英数の羅列のフォルダが残っていました。

WindowsUpdateの残骸だな、というのはすぐにわかったのですが、消そうとしても「eulaが削除できません」と出て残ってしまいます。

ネットで調べると、アクセス権限の問題という情報が見つかりました。

しかし、ファイルのプロパティに権限変更するためのセキュリティタブが出てきません。

権限の変更であれば、caclsコマンドが使えると思ったのですがネット上にこのコマンドを使った例は見つかりません。しかたないので自分で試します。

cacls (消したいフォルダのパス)\*.* /G Everyone:F

Everyone(全ユーザ)にフルコントロールの権限を与えます。

これで消せるようになりました。