2009年10月17日土曜日

Visual SourceSafeとアンチウィルスソフト

アンチウィルスソフトのF-Secureやってくれやがりました。
Visual SourceSafeのAnalyzeをやっている最中、VSSの構成ファイルの一部data\xxxaaaaaっていうファイル
ウィルスの疑いがあるからと検疫してくれました。

なにやってくれちゃってんの!

検疫から復元したんだけど、本当にVSSデータベースの整合性保たれてる?

analyzeでは、「ファイルが見つかりません」を大量に出力されましたが、本当にアンチウィルスソフトのリアルタイムスキャンとVisual SourceSafeの共存って駄目なの?

もうわからないことだらけ!

コンピュータの管理用のバッチ

ドメインに接続していれば、リモートコンピュータにドメインユーザを登録しておけば、コンピュータの管理からせつぞくできるのだけれど、ワークグループでは、リモートコンピュータのコンピュータの管理
に先立って、net useのログインを設定するひつようがある。
で、以下のバッチコマンドを用意し、ダブルクリックする。

echo off
net use \\SVR1 adminpass /user:administrator
compmgmt.msc /computer=SVR1
net use /d \\SVR1

SVR1は、サーバ名、adminpassは、SVR1のadministratorのパスワード。
でも、これ、Windows2003のIISの設定やターミナルサービスマネジャは使えない。

widows2003のadminpackを入れる以外でXPでWindows2003の管理ツールを使う方法が無いかなぁ?

2009年10月15日木曜日

Visual Studio2005のxsdファイルが開かない

Visual Studio2005のプロジェクトから、xsdファイルをデフォルトツールで開こうとすると、いきなりエラーダイアログが。

"次のエラーによりデータセットを読み込めませんでした:
指定された状態で使用するには無効なキーです。"
だって。プロジェクト内のすべてのxsdファイルで同様のエラーが出て開くことができません。
画面には、ビルドすれば直るかもってメッセージが出たのだけれど、やってみても全く直らず。
で、
似たような現象で、以下のがありました。
http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/98a8828c-2f31-437a-b96e-6b0e3e2d14e9

ここでいう、「データを接続できません」っていうエラーでもなければ、発生箇所も違うのだけれど、
駄目もとで、以下を消してみた。
C:\Documents and Settings\<ユーザー名>\Application Data\Microsoft\VisualStudio\8.0\ServerExplorer\DefaultView.SEView

やっぱり開かず。

この後、Visual Studioのサーバエクスプローラペインで、DBに接続しなおすと、なんかうまくいったっぽい動き。

なんなんでしょうね。ま、解決したからいいか。

やっぱり解決していなかった。一日置いたらまた接続できなくなっていた。で、Visual Studio2005を閉じて、例のファイルを消して、Visual Studio2005を立ち上げなおしたらxsdファイルを開けるようになった。

もしかすると、PCを起動するたびに個々を消さないといけないのかもしれない。


原因は秘文?F-Secure?

メールの誤送信

今日、会社でメールの誤送信をしてしまいました。
よりにもよって、ご送信先は、会社の情報セキュリティー部門。
「なんでもないからすぐに消して。お願い。」って出したけど、はぁ~~~。

Visual SourceSafe2005 のanalyzeで、Visual C++ライブラリのエラー

先週末開発VSSにanalyzeをかけて、メンテナンスをしようとしたところ、途中で止まってしまいました。
で、VSSがロックしっぱなしになってしまいました。
なんとなく気になって土曜日に出社して、ロックを解除したので多分誰も気づいていないんだろうけど、あのまま火曜日を迎えたらえらいことになっていたかも。

多分原因はこれ。
http://support.microsoft.com/kb/975026/ja

でも、このパッチ、どこでダウンロードすればよいかわからない。

タイムスタンプを見ても、これより新しいパッチなんだけど。。
http://support.microsoft.com/Default.aspx?id=943847

今週末リトライをしようと思っていたので、明日、マイクロソフトに電話して聞いてみようかな?

2009年10月14日水曜日

SQL ServerのSQLのミスリード

なんか無性に腹が立ったので記事化。
問題は、以下のページ、
http://japan.internet.com/developer/20070206/26.html
のヒント9のもの、SQLで、COALESCEで条件分岐させるもの。
この解説で、
「この方法は、クエリの対象行が数百万に及ぶ場合でも、きわめて高速に動作します。」
なんていっているけど、絶対そんなわけがない。
このSQLは数百万行ある場合には絶対に書いては駄目なSQL。この筆者は一体何を考えているのだろう。
この前のプロジェクトでもCOALECSEを積極的に使おうというものがあって、結局性能が出ずに、結合テスト終盤でSQLを直したという苦い経験があるので、こんな記事を見ると本当にすごく嫌な気分になる。

詳しくは、「インサイドSQLServer 2005 T-SQL編」の8.4.動的SQLの使用方法のP.419に書いてあるんだけど、まとめると以下の2点。

・COALESCEを使うと、引数がNULLのときも値を指定したときも、同じ実行プランとなり、引数がNULLの場合、非常に効率が悪い実行プランで実行してしまう。
・実行プランを組み立てた後、変数に値を代入するので、OPTION RECOMPILEをつけて、毎回実行プランを作り直したとしても、まったく同じ効率の悪いSQLを作ってしまう。

要は、SQL ServerではCOALESCEはアドホックな使い方か、小さなテーブルしか使っては駄目で、プログラム内に書くのは良くないっていうこと。


上のページのSQLであれば、SELECT文のところ面倒でもCOALESCEを使わずに以下の組み立てSQL文にするべきです。

DECLARE @SQL AS NVARCHAR(4000);
SET @SQL =
N'SELECT * FROM CUSTOMERS WHERE 1=1'
+ CASE WHEN @PrmFirstName IS NOT NULL THEN N' AND FirstName = @PrmFirstName' ELSE '' END
+ CASE WHEN @PrmLastName IS NOT NULL THEN N' AND LastName = @PrmLastName' ELSE '' END
+ CASE WHEN @PrmAddress IS NOT NULL THEN N' AND Address = @PrmAddress' ELSE '' END
+ CASE WHEN @PrmCity IS NOT NULL THEN N' AND City = @PrmCity' ELSE '' END
+ CASE WHEN @PrmState IS NOT NULL THEN N' AND State = @PrmState' ELSE '' END
+ CASE WHEN @PrmZip IS NOT NULL THEN N' AND Zip = @PrmZip' ELSE '' END;

EXEC sp_executesql @SQL,
N'@PrmCity AS varchar(50), @PrmState AS varchar(50), @PrmZip AS varchar(50),@PrmFirstName AS varchar(50), @PrmLastName AS varchar(50), @PrmAddress varchar(50)',
@PrmCity = @City, @PrmState = @State, @PrmZip = @Zip, @PrmFirstName = @FirstName, @PrmLastName = @LastName, @PrmAddress = @Address;


前のプロジェクトは、以下のように、さらに悪い部分一致をしていました。こちらも、リリース前に直しが発生しました。

where Address like '%'+@keyword+'%'
で、@keywordの指定が無い場合、@keywordに空文字('')を指定すること


開発効率最優先じゃなくて、効率も気を留めておかないと非機能検証で、すべてがご破算になっちゃうよぉ。