goo blog サービス終了のお知らせ 

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

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

ANAのシステム障害、原因は「認証機能の有効期限切れ」

2008-09-18 19:00:17 | Weblog

あちゃー(^^;)

ここの記事
ANAのシステム障害、原因は「認証機能の有効期限切れ」
http://www.itmedia.co.jp/news/articles/0809/18/news089.html

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


 全日本空輸(ANA)は9月18日、14日に起きた大規模なシステム障害の原因は、空港のカウンターで係員が操作する端末を認証する際、認証サーバの暗号化認証機能の有効期限が切れていたためと発表した。


あちゃー、有効期限切れですか(^^;)
なんか、ちょっとはずかしいような。。。
もっとも、この手のものは、他の会社でもありそうですな・・


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

JavaからVC++で作ったDLL中のウィンドウを出すところまできたけど。。

2008-09-18 16:56:32 | Weblog

 さっきの、透明なウィンドウの話をVC++でやったので、それをJavaからやる方法なんだけど、

・VC++のDLLで、ウィンドウを表示し、
・そのウィンドウをJavaからJNIを使って呼び出す

っていうところまでは、きた。

こんなかんじ
前の話が完了したところから、付け足す形で書いています)




■ダイアログを作成する

 VisualStudio(VC++)のほうで、リソースビューから右ボタンクリック、ポップアップででてくる「リソースの追加」で、ダイアログ(Dialog)を追加します。

 まあ、ダイアログについては変えないとして、プロパティで、

  「Visible」を「True」に

 かえてください。そうしないと、ダイアログが見えません。

 その後、ダイアログをダブルクリックして(で、できると思います。右ボタンのポップアップから選んでもいいけど・・)「クラスの追加」をします。

   基本クラスを「CDialog」にして
   クラス名を「CDispDlg」にして

完了。そうすると、DispDlg.cppとDispDlg.hができます。




■DispDlg.cppの修正

 Create(CDispDlg::IDD,pParent); を追加します。そうすると、こんなかんじ。
// DispDlg.cpp : 実装ファイル
//

#include "stdafx.h"
#include "TomeiTestJNI.h"
#include "DispDlg.h"


// CDispDlg ダイアログ

IMPLEMENT_DYNAMIC(CDispDlg, CDialog)
CDispDlg::CDispDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDispDlg::IDD, pParent)
{
	Create(CDispDlg::IDD,pParent); 
}

CDispDlg::~CDispDlg()
{
}

void CDispDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CDispDlg, CDialog)
END_MESSAGE_MAP()


// CDispDlg メッセージ ハンドラ

(赤字が追加分)




■DispDlg.hの修正

 リソースファイルがインクルードされてないので、#include "resource.h"をインクルード、
 するくらいかな・・・(^^;)
 こんなかんじ
#pragma once

#include "resource.h"		// メイン シンボル

// CDispDlg ダイアログ

class CDispDlg : public CDialog
{
	DECLARE_DYNAMIC(CDispDlg)

public:
	CDispDlg(CWnd* pParent = NULL);   // 標準コンストラクタ
	virtual ~CDispDlg();

// ダイアログ データ
	enum { IDD = IDD_DIALOG1 };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV サポート

	DECLARE_MESSAGE_MAP()
};

(赤字が追加分)




■ラッパーTomeiTestJNIの修正
 Javaから呼び出されるプログラムJava_TomeiTestJNI_test1で、画面を表示、
 それに伴いインクルードとか。こんなかんじ
// TomeiTestJNI.cpp : DLL の初期化ルーチンです。
//

#include "stdafx.h"
#include "DispDlg.h"
#include "TomeiTestJNI.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


//
//	メモ!
//
//		この DLL が MFC DLL に対して動的にリンクされる場合、
//		MFC 内で呼び出されるこの DLL からエクスポートされた
//		どの関数も関数の最初に追加される AFX_MANAGE_STATE 
//		マクロを含んでいなければなりません。
//
//		例:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// 通常関数の本体はこの位置にあります
//		}
//
//		このマクロが各関数に含まれていること、MFC 内の
//		どの呼び出しより優先することは非常に重要です。
//		これは関数内の最初のステートメントでなければな
//		らないことを意味します、コンストラクタが MFC 
//		DLL 内への呼び出しを行う可能性があるので、オブ
//		ジェクト変数の宣言よりも前でなければなりません。
//
//		詳細については MFC テクニカル ノート 33 および
//		58 を参照してください。
//

// CTomeiTestJNIApp

BEGIN_MESSAGE_MAP(CTomeiTestJNIApp, CWinApp)
END_MESSAGE_MAP()


// CTomeiTestJNIApp コンストラクション

CTomeiTestJNIApp::CTomeiTestJNIApp()
{
	// TODO: この位置に構築用コードを追加してください。
	// ここに InitInstance 中の重要な初期化処理をすべて記述してください。
}


// 唯一の CTomeiTestJNIApp オブジェクトです。

CTomeiTestJNIApp theApp;


// CTomeiTestJNIApp 初期化

BOOL CTomeiTestJNIApp::InitInstance()
{
	CWinApp::InitInstance();

	return TRUE;
}

CDispDlg *dd;

JNIEXPORT jstring JNICALL	Java_TomeiTestJNI_test1
			(JNIEnv *env,jobject obj )
{
	AFX_MANAGE_STATE( AfxGetStaticModuleState() );
	dd = new CDispDlg();
	return env->NewStringUTF("test1 OK");
}

(赤字が追加分)
このままだと、メモリを返さないで画面終了してしまい、メモリリークするけど、
ま、テストだからいっか(^^;)




■ビルド、DLLコピー

 そして、ビルド、うまくビルドできたら、VC++のプロジェクトフォルダにある、DebugまたはReleaseの下のDLLファイルを、eclipseのプロジェクトのフォルダ(さっきインポートしたフォルダ)の下に、上書きコピーする(すでにDLLファイルがあるので、置き換える)




■呼び出しソース修正
 で、これで実行してもいいんだけど、そうすると、瞬時におわってしまうので、10秒くらいだして、確認することにしました。
 大本の呼び出すプログラムTest.javaをこんな風に直して、10秒待たせます。
public class Test {
	public static void main(String[] args) {
		TomeiTestJNI t = new TomeiTestJNI();
		String str = t.test1();
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("実行結果" + str);
	}

}

(赤字が追加分)




■実行

 これで実行すると、ダイアログが表示して、ちょっと待った後、実行結果test1 OKとでるはずです。




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

JNIでVC++のDLLをJavaから呼んでみた(eclipseで)

2008-09-18 13:18:05 | Weblog

 この前、透明なウィンドウの話をVC++でやったので、それをJavaからやる方法について考えてみようと思ってます。
 で、一番初めに思いついたのが、ウィンドウ作成とかはVC++でやって、JNIを使って、それをJavaから呼び出そうかな・・・って思いました。

 ってことで、まずはJNIでVC++のDLLをJavaから呼んでみる実験君です。




■実験に用意するもの(環境)

Javaについて
・JDK1.5(1.5.0_07でやりました)
   →ほかのバージョンでもいいのかも知んないけど、今回はこれを使いました
・eclipse

VC++について
・Visual Studio2003のVC++
  →もっとあたらしいのでも大丈夫だと思う。今手元にあるのがこれなので・・

OSの環境
・Windows XP




■手順の概要

こんなかんじ
(1)Java側のソースを作る
(2)Javahでヘッダーを作る
(3)VC++側のソースをつくる
(4)必要なインクルードをコピー、ビルド
(5)ビルドしたDLLをeclipseへインポート
(6)実行



■(1)Java側のソースを作る
eclipseをたちあげ、

・まず、TomeiTestというプロジェクトを今回は作りました。

・呼び出しもとのクラスTest.javaと、
 JNI用のラッパークラスTomeiTestJNIを以下のように作りました。

○Test.java
public class Test {
	public static void main(String[] args) {
		TomeiTestJNI t = new TomeiTestJNI();
		System.out.println("実行結果" + t.test1());
	}
}

 
○TomeiTestJNI.java
public class TomeiTestJNI {
	/*
	 *	DLLをスタティックで 
	 */
	static {
		    System.loadLibrary("TomeiTestJNI");
		  }

	  /*
	   *	テストインターフェース 
	   */
	  public native String test1();
}





■(2)Javahでヘッダーを作る
 JNI用のラッパークラスTomeiTestJNI.classファイルができているので、それに対して、javah -jni クラス名をおこなって、ヘッダファイルをつくります。

 Windowsのアクセサリからコマンドプロンプトを出して、プロジェクトのフォルダ(ここでは
C:¥Documents and Settings¥xmldtp¥workspace¥TomeiTest
とします。なお、本当は¥は半角)にいき、そこから、javah -jni クラス名
C:¥Documents and Settings¥xmldtp¥workspace¥TomeiTest>javah -jni TomeiTestJNI

(>は本当は半角。>までがプロンプトでその先から入力文字)
を実行すると、以下のようなファイルが、TomeiTestJNI.hという名前でできます。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TomeiTestJNI */

#ifndef _Included_TomeiTestJNI
#define _Included_TomeiTestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     TomeiTestJNI
 * Method:    test1
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_TomeiTestJNI_test1
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

(<>は、本当は半角)




■(3)VC++側のソースをつくる

 VisualStudioを立ち上げて、ファイル→新規作成→プロジェクトを選ぶ。
 そしたら、下の図のように、

 「VisualC++プロジェクト」の「MFC DLL」を選び、プロジェクト名は適当に入れる。
 今回はTomeiTestJNIにしました。

 そうすると、ヘッダファイルとソースファイルができる。

○まず、ヘッダファイル(.h)のソースファイルをなおします。
 ヘッダファイルTomeiTestJNI.hができているので、

・#include "jni.h"を追加して、そのあと、
・下に、(2)でつくった、TomeiTestJNI.hのextern Cの部分を追加します。

こんなかんじ。
// TomeiTestJNI.h : TomeiTestJNI.DLL のメイン ヘッダー ファイル
//

#pragma once

#ifndef __AFXWIN_H__
	#error このファイルを PCH に含む前に、'stdafx.h' を含めてください。
#endif

#include "resource.h"		// メイン シンボル
#include "jni.h"

// CTomeiTestJNIApp
// このクラスの実装に関しては TomeiTestJNI.cpp を参照してください。
//

class CTomeiTestJNIApp : public CWinApp
{
public:
	CTomeiTestJNIApp();

// オーバーライド
public:
	virtual BOOL InitInstance();

	DECLARE_MESSAGE_MAP()
};

extern "C" {
/*
 * Class:     TomeiTestJNI
 * Method:    test1
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_TomeiTestJNI_test1(JNIEnv *, jobject);
}

(赤字が追加部分、そのほかは自動生成されています)

○ソースファイル(.cpp)の修正
 で、ソースファイルに、Java_TomeiTestJNI_test1を追加し、そこでtest1にやらせたいことを書きます。
こんなかんじ。
// TomeiTestJNI.cpp : DLL の初期化ルーチンです。
//

#include "stdafx.h"
#include "TomeiTestJNI.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//
//	メモ!
//
//		この DLL が MFC DLL に対して動的にリンクされる場合、
//		MFC 内で呼び出されるこの DLL からエクスポートされた
//		どの関数も関数の最初に追加される AFX_MANAGE_STATE 
//		マクロを含んでいなければなりません。
//
//		例:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// 通常関数の本体はこの位置にあります
//		}
//
//		このマクロが各関数に含まれていること、MFC 内の
//		どの呼び出しより優先することは非常に重要です。
//		これは関数内の最初のステートメントでなければな
//		らないことを意味します、コンストラクタが MFC 
//		DLL 内への呼び出しを行う可能性があるので、オブ
//		ジェクト変数の宣言よりも前でなければなりません。
//
//		詳細については MFC テクニカル ノート 33 および
//		58 を参照してください。
//

// CTomeiTestJNIApp

BEGIN_MESSAGE_MAP(CTomeiTestJNIApp, CWinApp)
END_MESSAGE_MAP()


// CTomeiTestJNIApp コンストラクション

CTomeiTestJNIApp::CTomeiTestJNIApp()
{
	// TODO: この位置に構築用コードを追加してください。
	// ここに InitInstance 中の重要な初期化処理をすべて記述してください。
}


// 唯一の CTomeiTestJNIApp オブジェクトです。

CTomeiTestJNIApp theApp;


// CTomeiTestJNIApp 初期化

BOOL CTomeiTestJNIApp::InitInstance()
{
	CWinApp::InitInstance();

	return TRUE;
}

JNIEXPORT jstring JNICALL	Java_TomeiTestJNI_test1
			(JNIEnv *env,jobject obj )
{
	
	return env->NewStringUTF("test1 OK");
}


(赤字が追加部分、そのほかは自動生成されています)
 
ほかのソースは手を加えません。




■(4)必要なインクルードをコピー、ビルド

 jni.hと、そこから呼ばれるjni_md.hをコピーします。

 JDKのなかに、includeというフォルダがあって、そこにjni.hがはいっています。
 また、その下のwin32というフォルダに、jni_md.hというファイルが入っています。

 この2つのファイルを、(3)で作成したVC++のプロジェクトのフォルダにコピーしてください。

 その結果、ヘッダファイル(TomeiTestJNI.h)と同じフォルダにjni.h、jni_md.hができ、
ヘッダファイル内で、#include "jni.h"と宣言して、見えるようになります。




■(5)ビルドしたDLLをeclipseへインポート

 で、そしたらビルドしてください。
 ビルドがうまくいくと、VC++のプロジェクトのフォルダの下のDebugまたはReleaseフォルダに(構成によってどちらのフォルダになるかは違いますが、とにかくどちらかのフォルダに)目的となるDLL、(今回はTomeiTestJNI.dll)ができます。

 このDLLをeclipseにインポートします。

 eclipseの(注意:ここから先はVC++でなく、まえにJavaで編集した、eclipseです)ほうにもどって(「(1)Java側のソースを作る」で作ったプロジェクトを開いているものとします)、import(インポート)をします。「FileSystem」を選び、Fromdirectoryで、VC++の上記Debug(またはRelease)フォルダ内にあるDLL(TomeiTestJNI.dll)を選んで、実行します。

 そーすると、プロジェクトに、TomeiTestJNI.dllが追加されるはずです。




■(6)実行

 で、あとはふつうに、RUNから(日本語パッチあててると、Runじゃないか)実行してくださいませ。




で、これをウィンドウ関係にたいしてラップして・・・

・・・めんどっちいいな(>_<)

もっといい方法ないのかな・・・調査してみます・・・



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

情報専門学科カリキュラム標準とITSS、新情報処理試験と学校学習指導要領の工業情報の関係は?

2008-09-18 10:51:13 | Weblog

 昨日、ITSS V3について書いて、それは、新しい情報処理試験合格とリンクしているって書いた。
 で、ITSSのスキル標準のレベルに関するドキュメントは
「ITスキル標準V3」ダウンロード
http://www.ipa.go.jp/jinzai/itss/download_V3.html

にあって、それぞれの内容はみれるけど・・・まあ、おおざっぱ。

で、レベル3に関して、むかしのソフトウエア開発と同じと考えれば、
研修カリキュラム
http://www.ipa.go.jp/jinzai/risa/study/kenshu02.html

にあって、どういうことを勉強しないといけないか分かる。




 ここで問題なのだが、大学で勉強してきたことの上に知識を付けて、情報処理試験に受かってITSSのレベルを上げると考えると、ITSSの上記の内容と、大学のカリキュラムがあっていないといけない。

 で、情報系の大学のカリキュラムは標準化されていて、それが、”情報専門学科におけるカリキュラム標準「J07」”

その内容が、

情報専門学科におけるカリキュラム標準「J07」最終報告
http://www.ipsj.or.jp/12kyoiku/taikai70sympo/index.html

(それぞれの報告のPDFでなく、PDFの下のリンク先に、各分野における細かいカリキュラムがある)

にある。




 さらにいうと、工業高校の情報から来る人もいると考えれば、工業高校の内容もチェック!
 工業高校の学習指導要領の情報については、
Home > 公表資料 > 出版物案内 > 新学習指導要領 > 高等学校学習指導要領 > 第7節 情報
http://www.mext.go.jp/b_menu/shuppan/sonota/990301d/990301s.htm


にあるんだけど、これが、情報処理試験のITパスポートあたりとリンクしていればいいんだけど・・・




新入社員研修とかを考える場合、そーなってくると、

ITSSのスキルと新情報処理試験の範囲(これは、一緒なんだろ?・・・ちがうのかなあ?)



情報専門学科におけるカリキュラム標準「J07」

と(工業高校の高卒も採用している場合)

工業高校の学習指導要領

を、マッチングして考え、足りないところは基礎からやるってこと?

・・・って、IPAは、マッチングをやんないのかあ?


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