SyncToyで簡単同期 更新

以前書いた「2010-04-23 SyncToyで簡単同期」のVBS
http://d.hatena.ne.jp/hishido/20100423/1271984991

しばらく使っていたのだけど、たまに「ファイルが見つかりません」とかエラーを吐く。
なので記述方法を変更(ちょっと回りくどいけど)。

Set objShell = Wscript.CreateObject("Wscript.Shell") 
objShell.run "cmd /c CD C:\Program Files\SyncToy 2.1 & SyncToyCmd.exe -R", 0
Set objShell = Nothing

パスは環境にあったものに変更すること。
cmd /c でコマンドプロンプトを実行→終了時に自動的に閉じる。
cdでSyncToyCmdのあるディレクトリに移動して実行。

最後の0はバッチ実行ウインドウを非表示に(1で表示、2で最小化表示、3で最大化表示)。

Windows Server 2003にASP.NET MVC2を設定

なんどか躓いたのでメモ

■まずはWeb Platform Installerで簡単に
Microsoft社が提供するパッケージインストーラ.NET Framework 4はもちろん、MVC2PHP、DB(SQLServerMySQLも)、そしてWordpressまでクリックインストールできてしまう優れもの。

http://www.microsoft.com/web/downloads/platform.aspx

これで.NET Framework 4とMVC2を入れると動くハズ。

■上記でうまくいかなかった場合
IIS上で.NET Framework 2.0と4.0のサイトが混在している場合、ちゃんと設定しないとダメみたい。
http://msdn.microsoft.com/ja-jp/library/1kdfe21k.aspx

.NET Frameworkは基本的に過去バージョンへの互換性があるので全部4.0にしちゃえばいいw

■それでもうまくいかなかった場合
マニュアルで.NET Framework 4に切り替えてもうまくいかない場合は、一度IISをアンインストールして、再度インストール。
IISインストール後に.NET Framework 4をIISに登録。

Windows Server 2003 (32bit)の場合は次のコマンドでOK。

c:\WINDOWS\Microsoft.NET\Framework\v4.0.11208\Aspnet_regiis.exe -iru

http://msdn.microsoft.com/ja-jp/library/k6h9cz8h.aspx

パソコンサポートに便利な簡単ツール

お客様や友人のパソコンサポート時に必要な情報を表示する簡単なツールを作成しました。

もう少し使い勝手等の向上余地はありそうですが、とりあえずリリース。
(電話越しにでも伝えられるドメイン名を取得したいな)

http://www.phix.co.jp/pcinfo/

同じシーンでも

小説の同じシーンでも、作者によっていろいろ表現の違いがある。
〜先生だったら…みたいな一覧をみつけたのでコピペ。

◆小説
「後ろで大きな爆発音がした。俺は驚きながら振り返った。」
ケータイ小説
「ドカーン!びっくりして俺は振り返った。」
ラノベ
「背後から強烈な爆発音がしたので、俺はまためんどうなことになったなぁ、とか そういや昼飯も食っていないなぁとか色々な思いを巡らせつつも振り返ることにしたのである」
山田悠介
「後ろで大きな爆発音の音がした。俺はびっくりして驚いた。振り返った。」
司馬遼太郎
「(爆発−−)であった。余談だが、日本に初めて兵器としての火薬がもたらされたのは元寇の頃である…」
荒木飛呂彦
「背後から『爆発』だアァァァッ!これを待っていたっ!振り返ると同時にッ!すかさず叩きこむ!」
竜騎士07
「ドカァァン!!!後ろで大きな爆発音がした…!俺は自分の置かれた状況を整理した…。 脳内に満ちた液体が取り除かれ、時間が動き出す…………ッッ!即座に俺は後ろを振り向く…ッ!」
ジェイ・マキナニー
「きみが街を歩いていると背後で爆発音がする。でもきみはすぐには振り返らない。 コカインの過剰摂取でイカレてしまったきみの頭には、それが現実の音なのか幻聴なのか判断できないからだ。」
村上龍
「後ろで爆発音がした、汚い猫が逃げる、乞食の老婆が嘔吐して吐瀉物が足にかかる、俺はその中のトマトを思い切り踏み潰し、振り返った。」
奈須きのこ
「――突如、背後から爆発音が鳴り響いた。その刹那、俺はダレよりも疾く振り返る―――ッ!」
矢口真里
「子供の頃からボンバーマンが大好きで、爆発音がしたらつい後ろを向いちゃうんです。 多分、芸能界では一番マニアックなボンバーマン好きだと思いますよ。
京極夏彦
「凄まじい音とともに地面が揺れる。――爆発、ですか?私が問うと、彼は白湯とさして変わらぬ出涸らしをすすり、 ――だから何だと言うのか。と答えた。りん、と、何処かで風鈴の音がした。」
池上彰
「じゃあ、そもそも爆発って何なんでしょう皆さん気になりますよね? そこで図を用意しました ちょっと後ろを見てください」

Baffaloルータ自動再起動その2

WSHで簡単にできることはわかったが、実際やると2点問題が。

まずXP/2003に入っているWSHは5.6、Windows 7のはWSH 5.8。
5.6だと

myIE.Navigate "http://ルータのアドレス/cgi-bin/cgi?req=frm&frm=init.html"

これが使えない?(ちゃんと調べていないので、ミススペルかもしれないが、Win2003だとひっかかり)

これのDurty but Easyな回避策は、ShortCutでも起動…かな。

それと、Basic認証ログイン画面がでてきてしまう。
IEのバージョンによっては http://user:pass@address が無効にされているのでレジストリで許可するか、ログイン対策をしなければいけない。

レジストリで回避する場合は(お勧めしない)

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl

にFEATURE_HTTP_USERNAME_PASSWORD_DISABLEキーを作成、DWORD iexplore.exeを作成すると可能になるはず(データ値は0のままでOK)。
(未確認)

そうでない場合は、キー入力を送信するといい。
下記VBSを再度書き直し。

Dim myIE
Dim myWS
Set myIE = WScript.CreateObject("InternetExplorer.Application")
Set myWS = WScript.CreateObject("WScript.SHell")

myIE.Visible = true 'false うざいけど表示に。Falseでもうまくいくかは未確認
myIE.Navigate "http://ルータのアドレス/cgi-bin/cgi?req=frm&frm=init.html"

WScript.Sleep 1500 '適当な長さ

'まずはIEを手前に
myWS.AppActivate("Internet Explorer")

WScript.Sleep 1500 'またちょっとまって

'実際にパスワードを入力する場合は
'myWS.SendKey "root{TAB}" 'Baffaloのルータは常にユーザ名がrootなので
'myWS.SendKey "パスワード文字列"
myWS.SendKey "{ENTER}"

WScript.Sleep 1500 'ページが表示されるぐらいまでまつ。
'本当はここでちゃんとページ読み込みチェックが必要

myIE.document.forms(0).elements(0).click()

Baffaloルータの自動再起動スクリプト

Baffaloのルータはお手頃価格で良いけど、たまに反応が悪くなる。
再起動するとなおるので、自動で再起動させてみようと思った。

まずいろいろ調べてみる。
"cgi-bin/cgi?req=inp&req=waiting_page.html"を呼び出すと再起動&「お待ちください」画面が表示されるが直接呼んでみると、不正だといわれる…。

もう少し調べてみると、再起動ボタンのある"cgi-bin/cgi?req=frm&frm=init.html"というページに隠しフィールドが2つある。
sWebSessionidとsWebSessionnumの2つ。
これらの値はページが呼び出される度に新しくなるので、これを使って不正かのチェックをしているようだ。

■Try 1■
まずはC#で簡単なプログラムを書いてみる。
ページの取得→パースしてsWebSessionidとsWebSessionnumを取得→再起動ページにPOST。

ルータのWebサーバがお行儀悪いので?、「サーバによってプロトコル違反が発生しました。」と例外が発生してしまう。
これはconfigファイルのsettingsに

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <system.net>
  <settings>
   <httpWebRequest useUnsafeHeaderParsing="true" />
  </settings>
 <system.net>
</configuration>

と記述することで回避できるのだけど、C#のバグ?でHttpWebRequestを続けて使うと接続が強制的に閉じられてしまう。
KeepAliveをfalseにしてもだめ、その他いろいろやったけど技術不足で断念。

■Try 2■
じゃあ今度はLinuxからwgetでやってみよう。
ページの取得→sedでsWebSessionidとsWebSessionnumを取得→wgetでページにPOST

POSTする段階で、401 Unauthorisedとでる。--http-userを指定しても、"http://root:*password*@"としてもダメなので断念。

■Try 3■
Windows Scripting Hostでやってみる。
IEオブジェクトを作成→ページ表示→ボタンクリック

Dim myIE
Set myIE = WScript.CreateObject("InternetExplorer.Application")
myIE.Visible = false
myIE.Navigate "http://ルータのアドレス/cgi-bin/cgi?req=frm&frm=init.html"
'本当はここでちゃんとページ読み込みチェックが必要
WScript.Sleep 500

myIE.document.forms(0).elements(0).click()

上手くいった。

なんか、ユーザの操作を真似するにはWSH最強だなあ。

LinuxにMonoをインストール

Mono 2.6.7がリリースされたので、CentOS 5.5にインストール。
http://www.mono-project.com/Release_Notes_Mono_2.6.7

バグフィックスのほかにASP.NET MVC2に対応。
通常のASP.NETの開発からMVCに移行しようと考えていたのでナイスタイミング。
イベントドリブンのASP.NET開発も、利点はたくさんあるのだけれど…。

mkdir ~/software
cd /root/software
yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make httpd-devel
wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.6.7.tar.bz2
tar jxvf mono-2.6.7.tar.bz2
cd mono-2.6.7
./configure -prefix=/opt/mono; make; make install
echo export PKG_CONFIG_PATH=/opt/mono/lib/pkgconfig:$PKG_CONFIG_PATH>>~/.bash_profile
echo export PATH=/opt/mono/bin:$PATH>>~/.bash_profile
source ~/.bash_profile
mono -V
cd ..
rm -rf mono-2.6.7

wget http://ftp.novell.com/pub/mono/sources/xsp/xsp-2.6.5.tar.bz2
tar jxvf xsp-2.6.5.tar.bz2
cd xsp-2.6.5
./configure -prefix=/opt/mono; make; make install
cd ..
rm -rf xsp-2.6.5

wget http://ftp.novell.com/pub/mono/sources/mod_mono/mod_mono-2.6.3.tar.bz2
tar jxvf mod_mono-2.6.3.tar.bz2
cd mod_mono-2.6.3
./configure -prefix=/opt/mono; make; make install
cd ..
rm -rf mod_mono-2.6.3
cp /etc/httpd/conf/mod_mono.conf /etc/httpd/conf.d/mod_mono.conf
service httpd restart

やっぱVisualStudioは便利だ…