ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

ブログより公式ページの方がセキュリティリスクが高い-米軍調査機関報告

2007-08-22 20:18:58 | Weblog

ここのスラッシュドットニュース
米軍調査機関報告、ブログより公式ページの方がセキュリティリスクが高い
http://slashdot.jp/security/07/08/22/0421247.shtml

によると(以下斜体は上記サイトより引用)


米軍調査機関の統計資料(PDF)によれば、 軍の公式Webサイトは軍事作戦上、兵士のブログ等の非公式サイトより遥かにリスクが高いものだそうだ。


ほお。。
で、その理由なんだけど・・・


結果の原因として、ブロガーである兵士は公式Webサイト管理者よりも、何が危険で何がそうでないかを理解しているから


ってしてるけど、ブログのほうが、日常生活のたわいもないことしか書かないからっていうことは、ないの?

「今日のお昼ご飯は、おいしかったです」
とか、
「練習中に、きれいなお姉さんをみかけました」
とか、
「上官は、頭が悪いです」
とかなど。。(いや、一番最後は、軍事機密??)

え、そんなブログを書いてるのは、
ウィリアムのいたずらだけだって(^-^;)

旗色が、またわるくなってきたので、このへんで・・・



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ログインしたら、最小化の状態でプログラムを立ち上げたい。

2007-08-22 17:50:54 | Weblog

 さっきの

 aaa.exe -start

 で、ログインしたら、すぐに、このaaaのスタート処理を開始したいとする。

 バッチファイルaaa.batに、

 aaa.exe -start

と書いて、そのバッチファイルaaa.bat を(スタートメニューの)スタートアップにいれれば(スタートアップで右クリック。開くで、スタートアップフォルダを開き、そこにaaa.batをコピーする)、たしかに、ログインしたら、すぐに、このaaaのスタート処理を開始してはくれます。

 くれるんですけど、ウインドウが画面に出てしまいます。
 ちょっと、みっともないっす。

 ウィンドウを開かないで(とはいえ、たちあがっているかどうかわかんないので、下にはでている)、最小化の状態で立ち上げたい!というとき。

start /MIN

 で、やればいいとおもったんですけど、aaa.exeのパスに空白が入ってたりして、いろいろすると、なんかうまくいかない。

 で、こうやると、うまくいくみたい。

1.バッチファイルaaa.batを右クリックして、「ショートカットの作成」で
  ショートカットを作ります

2.作った「aaa.batへのショートカット」を右クリックして、「プロパティ」を
  だします。

3.そのプロパティダイアログの「実行時の大きさ」を、
  (通常のウィンドウに普通なっているのを)
  「最小化」にして、OKボタンをクリック。最小化にします。

4.この「aaa.batへのショートカット」を、(スタートメニューの)
  スタートアップにいれます。
  →スタートアップで右クリック。「開く」で、スタートアップフォルダを開き、
   そこに「aaa.batへのショートカット」をコピーする

これで、自分がログインすると、ウィンドウは開かないでプログラムは立ち上がるみたい。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Javaにおける、他プロセスとの共有メモリを考える

2007-08-22 14:56:46 | Weblog

 VC++であれば、他プロセスとの共有メモリというのが実現できる。
 これによって、

aaa.exe -start

 でプログラムをスタートさせ、

 aaa.exe -stop

 でプログラムをストップさせられる。

また、aaa.exeがすでに立ち上がっているとき、「このプログラムは2重起動できません」と、2重起動を防止することも可能になる。

 これを、Javaでやるには・・??

※念のため。javaでstaticで行うメモリ共有は、あくまでも、クラス内、同一プロセス内のメモリ共有の話であって、他プロセスとのメモリ共有ではない。




■VC++では、ミューテックスを使う。

 Javaの前に、VC++では、どうやるか?というと、ミューテックスを使う。

 ここのサイト

共有メモリを使用する
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_FileMapping.html


にやり方が分かりやすく書いてありますね。

 そのサイトのプログラムを引用して、上記
    aaa.exe -startでスタート、
    aaa.exe -stopで終了
 させるには、こうなるのかな?

#include "stdafx.h"

#include <afxmt.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 唯一のアプリケーション オブジェクトです。

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// MFC を初期化して、エラーの場合は結果を印刷します。
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: 必要に応じてエラー コードを変更してください。
		_tprintf(_T("致命的なエラー : MFC の初期化ができませんでした。¥n"));
		nRetCode = 1;
	}
	else
	{
		if ( argc	<=	1 )
		{
			errmsg();
		}
		else
		{
			if ( strcmp(argv[1],"-start")	==	0 )
			{
				zikko();
			}
			else if  ( strcmp(argv[1],"-stop")	==	0 )
			{
				syuryo();
			}
			else
			{
				errmsg();
			}
		}
	}

	return nRetCode;
}

/*======================================*/
/*	エラー表示		    */
/*======================================*/
int	errmsg()
{
	printf("書式¥r¥n");
	printf("開始するとき aaa -start¥r¥n");
	printf("終了するとき aaa -stop¥r¥n");
	return	0;
}

/*======================================*/
/*	終了処理			   */
/*======================================*/
int	syuryo()
{
	HANDLE m_hMapping;     // メモリマップドファイルのハンドル
	char *m_pMappingView;  // ファイルのビューへのポインタ
	CMutex *m_pMutex;      // ミューテックスオブジェクト

	// メモリマップドファイルの生成
	m_hMapping = ::CreateFileMapping(
			(HANDLE)0xffffffff,     // 共有メモリの場合は0xffffffffを指定
			NULL,                   // セキュリティ属性。NULLでよい
			PAGE_READWRITE,         // プロテクト属性を読み書き可能に指定
			0,                      // ファイルサイズの上位32ビット
			1024,                   // ファイルサイズの下位32ビット
			"SukinaNamae" );	// メモリマップドファイルの名前

	// プロセス内のアドレス空間にファイルのビューをマップ
	m_pMappingView = (char *)::MapViewOfFile(m_hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 1024);

	// ミューテックスオブジェクトの生成
	m_pMutex = new CMutex(FALSE, "UKFileMappingTest_Mutex");

	// ★共有メモリへ書き込む。このときミューテックスオブジェクトを
	// 使用して同期処理をおこなう
	m_pMutex->Lock(INFINITE);
	m_pMappingView[0]	=	1;
	m_pMutex->Unlock();

	return	0;
}

/*======================================*/
/*	実行(開始)		    */
/*======================================*/
int	zikko()
{
	//	共有メモリ用
	HANDLE m_hMapping;     // メモリマップドファイルのハンドル
	char *m_pMappingView;  // ファイルのビューへのポインタ
	CMutex *m_pMutex;      // ミューテックスオブジェクト
	char	end_flg;

	printf("★★★  開始  ★★★");
	// メモリマップドファイルの生成
	m_hMapping = ::CreateFileMapping(
			(HANDLE)0xffffffff,     // 共有メモリの場合は0xffffffffを指定
			NULL,                   // セキュリティ属性。NULLでよい
			PAGE_READWRITE,         // プロテクト属性を読み書き可能に指定
			0,                      // ファイルサイズの上位32ビット
			1024,                   // ファイルサイズの下位32ビット
			"SukinaNamae" );	// メモリマップドファイルの名前

	// プロセス内のアドレス空間にファイルのビューをマップ
	m_pMappingView = (char *)::MapViewOfFile(m_hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 1024);

	// ミューテックスオブジェクトの生成
	m_pMutex = new CMutex(FALSE, "UKFileMappingTest_Mutex");

	// ★共有メモリへ書き込む。このときミューテックスオブジェクトを
	// 使用して同期処理をおこなう
	m_pMutex->Lock(INFINITE);
	end_flg				=	0;
	m_pMappingView[0]	=	end_flg;
	m_pMutex->Unlock();

	/*==============================================*/
	/*					  */
	/*	ここに、やりたい処理をかく		  */
	/*					  */
	/*==============================================*/

	//	共有メモリが0の間ループ
	while(end_flg	==	0)
	{
		/*==============================================*/
		/*					  */
		/*	ここに、やりたい処理をかく		  */
		/*					  */
		/*==============================================*/
		Sleep(1000);	//	スリープさせてみました
				//	別にいらないですけど

		// ★共有メモリの内容を取得。このときミューテックスオブジェクトを
		// 使用して同期処理をおこなう
		m_pMutex->Lock(INFINITE);
		end_flg = m_pMappingView[0];
		m_pMutex->Unlock();
	}

	/*==============================================*/
	/*					  */
	/*	ここに、やりたい処理をかく		  */
	/*					  */
	/*==============================================*/

	// ★ファイルのビューをアンマップし、マップのハンドルをクローズ
	BOOL b = ::UnmapViewOfFile(m_pMappingView);
	::CloseHandle(m_hMapping);

	// ★ミューテックスオブジェクトの破棄
	delete m_pMutex;

	printf("★★★  終了  ★★★");
	return	0;
}


(上記 < > ¥は、本当は半角)

対応が分かりやすくなるように、引用元のコメントはそのままにしてあります。

SukinaNamaeのところは、ミューテックスに、好きな名前をつけてください
ここの名前が同じものが共有できます。

最近は、ここによると、CreateFileMapping() でなく、VirtualAllocEx()でもできるみたいだけど。。




■で、Javaでは・・・

 じゃ、Javaで、他プロセス間の共有メモリを使うには?・・・

 そっだ!

 VC++で、上記のプログラムをちょこっとかえて、
   共有メモリを読み込むプログラムと
   共有メモリに書き込むプログラムを
 作成して、

 それを、JNIを使って呼び出せばよい・・・


 だから、表題は、「考える」って書いただけで、

 「Java”だけ”でできる」ってかいてないっすよお・・・

 ぎゃあー。。おこらないでくださいよおお・・

 旗色が悪そうなので、ここらへんで(^^;)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

開発の初めから順番に書いていってみる その80:単体テスト(5)データをExcelで作成例

2007-08-22 11:25:27 | 開発ネタ

シリーズ「開発の初めから順番に書いていってみる」の続きです。

 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 (バックナンバーは、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm)。

 今、「3.ドライバ、スタブ、テストデータの作成」をやっていて、今回は、テストデータについて考えてみたいと思います。

 DBのテストデータというと、自動生成!となりますが、Excelから、INSERT文などは、簡単に作れます。

今回は、とくに、

   Excelとメモ帳(ノートパット)で簡単にSQLのINSERT文を作る

についてです。




■作成内容

Excelに、こんな表があったとします。

これを、こんな形や
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(1,'すいか',400)
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(2,'メロン',300)
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(3,'もも',100)


こんな形にします。
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(1,"すいか",400)
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(2,"メロン",300)
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(3,"もも",100)


つまり、文字列のところには、シングルクォート、ダブルクォートをつけて、
INSERT文の部分を書くというための方法です。
(シングルクォートがふつうだけど、ダブルのほうが式が難しいので、
 ダブルで説明しています ^^;
 シングルクォートは、※をつけて、紹介しています)。




■手順

手順は、こんなかんじ
 1.項目名のところをつくる
 2.文字列にダブルクォート
 3.INSERT文をつくる


では、1から見ていきます




■項目名のところをつくる

  INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(

までをつくります。

●1.メモ帳を開いてください。

●2.だまって、

INSERT INTO SHOHIN_TBL(

(SHOHIN_TBLは、実際に作ろうとしているテーブル名を書いてください)
とかきましょう。

●3.Excelの1行目の表題をコピーして、2で書いた文の後に貼ります
  そうすると、こうなります。

INSERT INTO SHOHIN_TBL(ID	商品名	単価


●4.タブを置換します

4-1.IDと商品名の間のタブを選択し、編集→コピーでコピーします
4-2.編集→置換で、置換ダイアログを出し、
    「検索する文字列」のところに、Ctrl+V
    (コントロールキーを押しながらVキーを押す)で、貼り付けます。
    「置換後の文字列」のところに、,
     (カンマ)を入れます。そうすると、こんな感じになります。

(わざと、検索する文字列のところをドラッグして、分かりやすくしています)
4-3.「すべて置換」をクリックすると、タブが、,になります。
4-4.「キャンセル」をクリックすれば、もどります。以下の文ができます
INSERT INTO SHOHIN_TBL(ID,商品名,単価



●5.残りを書きます。
こんなかんじ
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(


で、INSERT文の前のほうは、できました




■文字列にダブルクォート

 データ部分を作成します。そのため、文字列は、ダブルクォートで囲みます。

●6.まず、データをよこにコピーします。
  あとで、1列入るので、元のデータより2列以上あけて下さい。
  こんなかんじ


●7.文字列のところの一番上のセル(ここでは、G2の「すいか」)に、
  以下の式を書いて、ダブルクォートで囲みます。

  = """" & B2 & """"

  つまり、=のあとに、ダブルクォート4つ、 & 元のセル & ダブルクォート4つ
  です。それで、エンターキーをおすと、こんなかんじ



※シングルクォートの場合は、上記の式を

  = "'" & B2 & "'"

  にします。

●8.いまの、G2のセルの右下に、四角いぽっつんがありますが、ここをクリックして
  下にドラッグすると、今の式をもとに、どんどん、各列の内容がはいっていきます
  (ダブルクォートで囲まれます)
  →フィルハンドルというそうです。ここにいろんなテクニックが(^^)

ってことを、文字列の各列に対して行い、ダブルクォートをつけます。




■INSERT文をつくる

●9.データの前(さっきの例だと、E桁)に、5で作成した、INSERT文の前
   のところを、コピーして、貼り込みます
  →ノートパッドでコピーして、Excelに貼りこみます。可能です。

●10.9で貼った、Excelのインサート文を、8の方法
    (右下のぽっつん=フィルハンドルを下にドラッグ)で、
    データ分、コピーします。

●11.データの後(さっきの例だとI桁)に、) を書いて
    (閉じカッコです)10と同様にして、データ分コピーします。
    ここまでの操作で、こうなります。



●12.INSERTのはじめ(例だとE2)から、)のおわり(例だとI4)までを、
    コピーし、ノートパッドに貼りこみます。
    そうすると、ノートパッドに以下ののものが出来ます。

INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(	1	"すいか"	400	)
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(	2	"メロン"	300	)
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(	3	"もも"	100	)


●13.ここで、「4.タブを置換します」で書いた方法で、
    タブを、,に「すべて置換」します。以下のようになります。
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(,1,"すいか",400,)
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(,2,"メロン",300,)
INSERT INTO SHOHIN_TBL(ID,商品名,単価)VALUES(,3,"もも",100,)


●14.ノートパッドの置換で、(, を ( にすべて置換します

●15.ノートパッドの置換で、,) を ) にすべて置換します

そーすると、めでたく目的のものが出来ます。




 今回のように3行しかないなら、こんなことしないで、データを書いたほうが早いですが、大量にある場合は、機械的にできるので、簡単です。
(文字で書くと、なんか、すごいいっぱいやらないといけなさそうですが、
 実際には、簡単操作だけなので、早く簡単にできます)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする