人気ブログランキング |
<   2010年 09月 ( 38 )   > この月の画像一覧
(.Net)DataGridViewでリセットする方法
DataGridViewにDataTableをバインドし、ユーザがリセットボタンを押したタイミングで、初期値に戻すための方法です。

DataGridView のメンバでそれらしいを探してみたんですが、見当たりません。
仕方なく下記のような方法をとることとしました。(C#)
DataTable mTblBkup;
DataTable tbl ; //tblには既にインスタンスが生成されてることとします。
 
public void Form1_Load(DataTable tbl)
{
mTblBkup = tbl.Copy();
 
datagridview1.DataSource = tbl;
 
}
 
private void btnReset_Click(object sender, EventArgs e)
{
tbl = mTblBkup.Copy();
dgvFilter.DataSource = tbl;
}

DataTable.Copy で DataTable のバックアップを作成し、リセットボタンを押下したら、バックアップを戻すというような方法です。
あまり、きれいな方法ではありませんが、とりあえずできました。
by jehoshaphat | 2010-09-16 20:04 | .Net開発
MS Hyper-V 2.0にLinux(CentOS)とLinux Integration Services 2.1を入れてみた
以前に、MS Hyper-V RC1にLinux(CentOS)とLinux統合コンポーネントRC0を入れてみた で Hyper-V 1.0 (RC1) に Linux(CentOS) と Linux統合コンポーネントRC0 をインストールする手順を書きました。


社内で新規に Windows Server 2008 R2 上の HyperV 2.0 で、CentOS を動かすことになったので、調査したら Linux統合コンポーネント(Linux Integration Services 旧:Linux Integration Component)もいつの間にやら結構バージョンアップしてたんですね。
つい最近 2.1 がリリースされたということが、下記ニュースサイトに掲載されてました。マルチプロセッサ対応や時刻同期、シャットダウン連携機能が追加されたようです。
Microsoft、「Linux Integration Services 2.1」をリリース-ITmedia エンタープライズ

ということで導入手順です。
まず、Linux Integration Services v2.1 for Windows Server 2008 Hyper-V R2 をダウンロードします。
Exeを解凍すると、ISOファイルと、英語の導入マニュアルPDFがでてきます。ISOをHyper-Vの光学ドライブに割り当てます。

後は、マニュアルの「Linux Integration Services v2.1 for Windows Server 2008 Hyper-V R2」に従って作業すればいいだけです。といっても英語が読むのは苦手なので一応メモメモ。

途中でコンパイル作業があるので、Linux上の「Software Development」をインストールしておく必要があるようです。

下記コマンドで、ISO内のデータをコピーします。

# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom
# cp -R /mnt/cdrom/* /opt/linux_ic_v21_rtm

ドライバをコンパイルしインストールします。インストール後は再起動します。

# cd /opt/linux_ic_v21_rtm/
# make
# make install
# reboot


64bitのRedHatの場合は、下記コマンドも必要なようです。

# rpm -ivh /mnt/cdrom/Server/adjtimex-1.20-2.1.x86_64.rpm


マニュアルにはLinux用コンポーネントのアップデート方法も載せられており参考になります。

Linux Integration Services(Linux IS)v2.1のインストール前と後でディスクアクセスとネットワークのベンチマークを行いました。

まずディスクアクセスのテストです。
Linux ISのインストール前が下記になります。

[root@localhost ~]# hdparm -ft /dev/hda
/dev/hda:
Timing buffered disk reads: 180 MB in 3.04 seconds = 59.20 MB/sec

Linux ISのインストール後が下記になります。

[root@centos01 ~]# hdparm -ft /dev/hda
/dev/hda:
Timing buffered disk reads: 506 MB in 3.00 seconds = 168.62 MB/sec

圧倒的にパフォーマンスが違いますね。おおよそ2.8倍ほど違います。


次にネットワークのテストです。iperfを使いました。
Linux ISのインストール前が下記になります。

bin/iperf.exe -c 10.0.0.1 -P 1 -i 1 -p 5001 -f k -t 10
------------------------------------------------------------
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 63.0 KByte (default)
------------------------------------------------------------
[1904] local 10.0.0.2 port 4777 connected with 10.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[1904] 0.0- 1.0 sec 5368 KBytes 43975 Kbits/sec
[1904] 1.0- 2.0 sec 6376 KBytes 52232 Kbits/sec
[1904] 2.0- 3.0 sec 6568 KBytes 53805 Kbits/sec
[1904] 3.0- 4.0 sec 6520 KBytes 53412 Kbits/sec
[1904] 4.0- 5.0 sec 6504 KBytes 53281 Kbits/sec
[1904] 5.0- 6.0 sec 6200 KBytes 50790 Kbits/sec
[1904] 6.0- 7.0 sec 6312 KBytes 51708 Kbits/sec
[1904] 7.0- 8.0 sec 6536 KBytes 53543 Kbits/sec
[1904] 8.0- 9.0 sec 6496 KBytes 53215 Kbits/sec
[1904] 9.0-10.0 sec 6432 KBytes 52691 Kbits/sec
[1904] 0.0-10.0 sec 63320 KBytes 51870 Kbits/sec
Done.

おおよそ50Mbps程度ですね。

Linux ISのインストール後が下記になります。

bin/iperf.exe -c 10.0.0.1 -P 1 -i 1 -p 5001 -f k -t 10
------------------------------------------------------------
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 63.0 KByte (default)
------------------------------------------------------------
[1904] local 10.0.0.2 port 2087 connected with 10.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[1904] 0.0- 1.0 sec 11384 KBytes 93258 Kbits/sec
[1904] 1.0- 2.0 sec 11536 KBytes 94503 Kbits/sec
[1904] 2.0- 3.0 sec 11512 KBytes 94306 Kbits/sec
[1904] 3.0- 4.0 sec 11528 KBytes 94437 Kbits/sec
[1904] 4.0- 5.0 sec 11512 KBytes 94306 Kbits/sec
[1904] 5.0- 6.0 sec 11416 KBytes 93520 Kbits/sec
[1904] 6.0- 7.0 sec 10720 KBytes 87818 Kbits/sec
[1904] 7.0- 8.0 sec 11568 KBytes 94765 Kbits/sec
[1904] 8.0- 9.0 sec 11472 KBytes 93979 Kbits/sec
[1904] 9.0-10.0 sec 11336 KBytes 92865 Kbits/sec
[1904] 0.0-10.0 sec 113992 KBytes 93234 Kbits/sec
Done.

100MbpsのLANなんですが、やはり限界近くまで高速になってます。
by jehoshaphat | 2010-09-14 23:39 | サーバがらみ
Windows Storage Server 2008 のパスワード
Windows Storage Server 入りの NAS 導入に向けて、評価のために仮想マシンに Windows Storage Server 2008 を入れてみました。

まず、Storage Server は基本OEM向けのため、日本語版は最初から用意されていないっぽいです。
なので、TechNet サブスクリプションから言語を English にして 「Windows Storage Server 2008 Embedded (Basic, Standard, Enterprise, Workgroup) (x64) - DVD (English)」[ファイル名:en_windows_storage_server_2008_embedded_basic_standard_enterprise_workgroup_dvd_x64_x15-49574.iso] をダウンロードします。

インストール後ハマったのはログインパスワードでした。
デフォルト Administrator となっているんですが、既に初期パスワードが設定されているようです。


パスワードは、「Windows Storage Server 2008 Embedded Tools (x86 and x64) - CD (English)」[ファイル名:en_windows_storage_server_2008_embedded_tools_cd_x64_x86_x15-62577.iso] をダウンロードし、ルートフォルダにある WSS2008_OEMGUIDE.CHM ヘルプファイルの "Preinstallation Preview" を押下すると掲載されてるようです。
ここ見るとデフォルトパスワードは wSS2008! みたいですね。

ログイン後、Language Pack を入れます。
Language Packのディスクを挿入し、「Control Panel」から「Regional and Language Options」 → 「Keyboards and Languages」 タブの 「Install/uninstall Languages」 → 「Install Languages」 で、Language Pack メディアの 「langpacks\ja-jp」 を選択します。
これで、「Language」 → 「Japanese」 でインストールできます。
インストール後、「Change my display language to」 を 有効にし、「Log off」 をクリックしると、次回ログイン時から日本語になります。

参考:
Windows Storage Server 2008 をインストール その 2 - Windows Live
Windows Storage Server2008 インストール 1
by jehoshaphat | 2010-09-13 22:57 | サーバがらみ
CPU仮想化機能の有効・無効調査
Windows Server 2008 R2 の評価を Virtual PC 2007 か Virtual Server でやろうとしたんですが、ゲストOSの64bit版に対応してなかったので、Sun VirtualBox 3.1 を使うことにしました。
しかし、VirtualBoxでもゲストOS64ビット版を動かすには、CPUの仮想化支援機能を使えないといけないようです。

で、CPUが Xeon X5300シリーズなので、Intel VT がついてるはずなのに、Virtual Box 起動時に仮想化支援機能が無いから64bitじゃ起動できねーよって怒られます。

VirtualCheckerを使って調べてみると、BIOSで無効にされていることが分かりました。
これでBIOSで有効にしてやると無事に起動できました。

BIOSでの有効無効やVTの機能なしがわかるVirtualCheckerはほんと便利です。

参考:
Windows 7のWindows XP Modeが利用できるかどうかを調べる - @IT
by jehoshaphat | 2010-09-13 22:53 | ハードウェア
(PHP)header関数使ってBasic認証するときのphp.iniの注意点
phpでベーシック認証 - bnoteを参考にし、PHPのheader関数を使って、Basic認証をするコーディングをしてたんですが、どうもうまくいきません。

WWW-Authenticate ヘッダ送信後に認証ダイアログが表示されるべきなのですが、そこをスルーし401のヘッダ送信部分が動いているようなのです。

で、調査するとphp.iniの設定に問題があることが分かりました。
PHP:Warning: Cannot modify header information - headers already sent by ...の解決策: go4itの情報が参考になりました。

php.iniの output_buffering の値を On にすればいいようです。


ただベーシック認証を使う方法よりかは、フォーム認証を使う方が一般的ですよね。
by jehoshaphat | 2010-09-13 22:51 | PHP開発
(ActiveDirectory)GPTの同期の方法は?
複数のドメインコントローラが有って、グループポリシーやActiveDirectoryのテストを行いたいときは手動で情報を複製したい時があります。

ActiveDirectoryデータベースのドメインコントローラ間の複製はMMCの「ActiveDirectoryサイトサービス」から Sites → ドメイン名 → Servers → DC名 → NTDS Settings で右ペインに表示されたオブジェクトを右クリック→「今すぐレプリケート」からできることは以前どこかで聞いたので知ってました。

ITPro:【解説】グループ・ポリシーの変更をすぐにクライアントへ反映させるには?によると、グループポリシーの設定はActive Directoryと結びついた情報である「グループ・ポリシー・コンテナ(GPC)」と、「グループ・ポリシー・テンプレート(GPT)」との二つに分かれてるようです。

GPTの方はSYSVOL共有フォルダにファイルとして保存されるようです。

おそらくGPCの方は、「ActiveDirectoryサイトサービス」でレプリケートしたときにドメインコントローラ間で同期されてるんでしょうが、GPTが入っているSYSVOL共有フォルダの方が、どうすれば同期できるのかがわかりません。

今回ログインスクリプトを下記のSYSVOL共有フォルダに保存しました。
\\domainname.local\SysVol\domainname.local\Policies\{xxxxx-xxxx-xxxx-xxxx-xxxxxx}\User\Scripts\Logon

この時、ドメインコントローラ1台目はログインスクリプトを差し替えると更新されたんですが、ドメインコントローラ2台目が更新されません。
しばらく放置してると更新されてました。

いろいろ調べたんですが、結局わからずしまいだったんで、直に2台のドメインコントローラにログインスクリプトファイルを差し替えることとしました。
SYSVOL共有フォルダは \\ドメインコントローラ名\SYSVOL\ でもアクセスできるようです。

SYSVOLの手動同期の方法なんか無いでしょうか?
by jehoshaphat | 2010-09-12 23:22 | サーバがらみ
(C++)文字列結合のwcscat関数でハマった
当初、下記のようにしてたらアクセス違反の例外となりました。

TCHAR path[] = _T("d:\\a.txt");
 
TCHAR file[1024] = _T("d:\\a.txt");
wcscat( _T("notepad.exe "), file );

で、よく考えたら、wcscat は第一引数に、第二引数の文字列を追加するんですよね。
よって、第一引数には、追加後の文字数以上の大きさ無いといけません。

ボケミスでした。
by jehoshaphat | 2010-09-12 23:21 | C/C++開発
WSHでログアウト・シャットダウン・再起動を行う
VBScriptでシャットダウンや再起動、ログオフを行う方法です。
下記のようなコードでできるようです。
Option Explicit
 
Dim objShut , objOS , objSystem
 
'シャットダウンオブジェクト取得
Set objShut = GetObject("winmgmts:{impersonationLevel = impersonate, (Shutdown)}")
'OSのオブジェクト取得
Set objOS = objShut.InstancesOf("Win32_OperatingSystem")
 
'シャットダウン
For Each objSystem In objOS
objSystem.Win32Shutdown 8
Next
 
'再起動
For Each objSystem In objOS
objSystem.Win32Shutdown 2
Next
 
'ログオフ
For Each objSystem In objOS
objSystem.Win32Shutdown 0
Next


参考:
WSH入門 > 第4回:Windowsでの運用の自動化について [高度情報技術科]
VBScript Tips (Tips0184)
by jehoshaphat | 2010-09-12 23:14 | VBA、マクロ
ネットワークドライブをコマンドで割り当てる
Windowsでネットワーク上の共有フォルダをネットワークドライブに割り当てる方法です。
net use コマンドを使うと容易にできるようです。
こんな感じです。

net use y: \\filesv\share\testdir


これをグループポリシーとかでログインスクリプトに仕込んでおけば全体への展開も楽ですね。
ちなみに、ネットワークドライブはユーザ単位の設定になるのでターミナルサーバとかでユーザの個人フォルダを割り当てするときには便利ですね。

参考:
MSサポート:Windows XP でネットワーク ドライブの接続および切断を行う方法
コマンドプロンプトでのネットワークドライブの割り当て
DOS「ネットワークドライブ」コマンド(Hishidama's Windows DOS command "net use" Memo)
net useコマンド - 管理者必見! ネットワーク・コマンド集:ITpro
by jehoshaphat | 2010-09-11 00:42 | 豆知識
(バッチ)日付や時間をファイル名にしたい
バッチファイルで処理結果などをファイルに保存するときに、日付や時間を入れたい時があります。
%date% や %time% を使うと / や : などファイル名として使用できない文字まで出力されちゃうんですよね。

その場合、環境変数から一部の文字を取り出したり、置換すればいいようです。

文字列の抜き出しや切り取りは何文字目から何文字分みたいな感じで指定できるようです。

詳しい書式はバッチ・ファイル中で日付をファイル名に使用する - @ITが参考になります。

まず日付ですが、%date% でファイル名に使えない文字を出力しないようにしたいので、それらの文字を空文字に置換します。

set date2=%date:/=%
echo test > d:\%date2%.txt


これで / が空文字になり、date2環境変数に入ってファイルパスに使うことで日付のファイルを作成できます。


次に時刻ですが、これはちょっと面倒です。
値がひとけたの時は空白になってしまうのと、ミリ秒まで値が入ってしまうことです。
とりあえず、置換で:を削除し、空白を0に置換、そして、0から6文字目まで対象にするという方法にしました。

set date2=%date:/=%
set time2=%time: =0%
set time2=%time2::=%
set time2=%time2:~0,6%
echo test > d:\%time2%.txt



参考:
バッチファイルで今日の日付 (YYYYMMDD 形式) を取得 - アジャイルプログラマの日常
by jehoshaphat | 2010-09-11 00:41 | 豆知識