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

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

中国「レノボ」グループと日本のSJHDが資本・業務提携、中国版金融ビッグバンの恩恵享受?

2006-10-20 22:04:24 | Weblog

 日本証券新聞のスクープだそうです(って、新聞に書いてある)。
 日本証券新聞2006年10月23日(今日20日の夕方に、もう出ています)1面の記事です。

 IBMのパソコン部門を買収した、中国「レノボ」グループに属する「デジタルチャイナ」社と、日本のSJホールディングス(ジャスダック市場、証券コード2315、以下SJと書きます)が資本・業務提携をしたそうです。

 上記新聞記事によると、基本合意内容は(以下斜体は上記新聞記事より引用)

1.銀行POSおよび税収コントロール・レジスタを製造販売する両社のグループ企業を合併させ、SJがマジョリティを持つ。

2.日本向けのソフト開発で業務提携

3.SJの中国における金融SI(システムインテグレーション)をレノボが支援する


だそうです。




 で、税収コントロール・レジスタは中国の国策で、今後急速に需要が拡大する見込みだそうなんだけど。。。税収コントロール・レジスタって何??

 そんな、ウィリアムのいたずらとおなじことを考えているあなたへ。。
 ここ(PDF)の1ページ目と2ページ目の間の注に説明があります。なお、上記新聞記事と、このPDFとは、違う内容です。
 簡単に言うと、レジスタに入ったお金の情報を、税務署が集めることができるシステム(^^;)おおおお。。。そこまでやるか(^^;)




 で、その新聞記事では、最大の材料は「中国版金融ビッグバン」を控えて活発化する中国の金融システム投資のメリットを日本企業としては初めて享受しそうなことだそうだが、そもそも「中国版金融ビッグバン」って、なに。。(^^;)?

P.S、名古屋商科大の研究科紹介の研究内容で書いている人がいた(ここ)。
  けど、よくわかんない。。。
  でも、名古屋商科大って、最近、ニュースに。。とか、言っちゃいけませんね(^^;)



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

CGI、サーブレット、JSP、Struts、EJBの相違としくみを説明してみた。。。

2006-10-20 18:49:11 | JavaとWeb

 ウィリアムのいたずらが、このまえ、ふらふらあるいていたら、経験2-3年くらいの人が、
サーブレットとかは、作れるけど仕組みは分からない。何がいるのかもわからない
という話をしてました。

 ということで、今日は、サーブレットと、ふつうのCGIと、EJBとStrutsとJSPとそんなこんなの違いを書いてみたいと思います。




■まず、EJBと他のモノとの違い
 まず、EJBと他のものは、クライアントサーバーという点では同じなのですが、そのクライアントサーバー間を流れるプロトコルが違います。

 EJBの場合は、クライアントとサーバー、どちらにもプログラムがありますが、この間を、
  ・SOAP
  ・RMI/IIOP
 などなどのプロトコルでやりとりします。

 一方、それ以外のものは、ブラウザを使って、ふつうのブラウザが発行する/受け取るHTTPプロトコルを使います。この点で違います。




■CGIと他のものとの違い
 では、CGIや普通のページと、StrutsやJSPやサーブレット、どこが違うかというと、サーバー側のプログラムが違います。

 どちらもブラウザから、HTTPプロトコルで、URLと引数が送られるのですが、

●CGIや普通のページは、HTTPサーバー(Apacheなど)が、処理します。
 そして、CGIなら、それを起動し、結果を返し、ページ表示ならそれを表示します

  しくみは
  1.ブラウザからURLと引数(GETなら?を付けて、属性=値&の形で)を渡す
  2.HTTPサーバーはそれを受け取り、
     2-1.ページ表示なら、内容をHTTPサーバーへ
     2-2.CGIなら、それを起動し、結果をHTTPサーバーへ
     2-3.その他連携してるものは指定されたものを呼び出し、
           結果をHTTPサーバーへ
  3.HTTPサーバーは2で受け取った内容をHTTPプロトコルに基づき、
    ブラウザに返します
  4.ブラウザは3で受け取った内容を保存します。


●StrutsやJSPやサーブレットは、サーブレットコンテナが、処理します。
 サーブレットコンテナは、Tomcatが有名です。

 しくみは、
  1.ブラウザからURLと引数(GETなら?を付けて、属性=値&の形で)を渡す
  2.サーブレットコンテナは、それを受け取り、
     ★ここから先で、StrutsやJSPやサーブレットが分かれる
  3.サーブレットコンテナは2で受け取った内容をHTTPプロトコルに基づき、
    ブラウザに返します
  4.ブラウザは3で受け取った内容を保存します。


 なお、上記「CGIや普通のページは」の2-3で、「その他連携してるもの」とありますが、
 ApacheとTomcatが連携しているものというのがあります。この場合、
 「CGIや普通のページは」の2-3から、上記サーブレットコンテナの2に入り、
  結果が、その連携しているものに渡されます。


●ちなみにEJBの場合は、J2EEサーバーが処理します




■StrutsやJSPやサーブレットは、サーブレットコンテナの動きの違いです

 上記の★がちがいます。

●サーブレットの場合、サーブレットコンテナは、指定されたサーブレットのクラスを
 起動し、結果(標準出力の内容)を受け取って、それをHTTPプロトコルに載せて
 クライアントに返します。
 →つまり、サーブレットは、サーブレットコンテナが必要です

●JSPの場合は、サーブレットコンテナは、指定されたJSPファイルを
 (初めのアクセスで)コンパイル、そしてできたクラスを実行し、その結果*を
  HTTPプロトコルに載せて、クライアントに返します。
 →つまり、JSPは、サーブレットコンテナが必要です

 *コンパイルしたクラスでは、JSPに書かれたHTML部分の内容は、標準出力に
  出されるようになっている。

●Strutsの場合は、サーブレットコンテナは、strutsのクラスを呼び出し、
 そのStrutsのクラスは、設定ファイル(struts-config.xml)をみて、
 クラスを呼び出します。
 →つまり、Strutsは、サーブレットコンテナとStruts用のクラス群が必要です。




これらをまとめると、こんなふうになります。





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

Javaの画面表示-その9:AWTによるMVCの分離(その2)

2006-10-20 16:49:50 | JavaとWeb

 シリーズJavaの画面表示のつづきです。前回の、AWTでMVCの話の続きです。

 前回の内容、AWTに分けるには、まず、画面ごとにクラスをつくり、

(1)画面のクラスで、初期化、(再)描画、終了のクラスを作成、これをV(ビュー)とする
(2)画面のクラスの中に、イベント処理用に内部クラスを作り、そこをC(コントローラー)

としたあとで
(3)モデル部分(M)を作る
(4)モデル、ビュー、コントロール間を共有する、ハッシュマップを用意
 →このハッシュマップにモデルで値をセット、
   コントローラーで再描画メソッドを呼び出し
   ビューの再描画でハッシュマップの値を元に再描画する
(5)スタート時、はじめの画面を生成する   

となります。

 今回は、(3)については新設、(2)と、(5)については修正が入るので、
 そこについて書きます。



 
●モデル部分を新設(Shori.java)

 イベントは、第一画面のとき、
・「挑戦する」をクリックされたとき
・「打ち終わった!」をクリックされたとき

におこるので、それぞれshori1,shori2という名前のメソッドにして、
  (あ)ハッシュマップから必要な値を取り出し
     shori1では、必要ないのでこの部分はなし
     shori2では、テキストエリアに入力された言葉(キーrensyu)を取り出し
    
  (い)処理を行い
     shori1では、現在時刻を求める
     shori2では、正解率と経過秒数を求める

  (う)ハッシュマップに(い)で求めた値を設定している
     shori1では、現在時刻をstrtimeとして設定
     shori2では、正解率をsei_ritu、経過秒数をbyoとして設定

また、上記で値の受け渡しに利用するハッシュマップ(共通領域)を
コンストラクタShori(HashMap map)で受け取るようにしている。




●コントローラー(イベント部分)での処理
 上記(2)のコントローラーにあたるところは、各画面の内部メソッドになる。
 たとえば第一画面だと、gamen1.java
gamen1_HandleEventにあって、ここのactionPerformedに、イベントが入ってくるので、
ここから、モデル関数を呼び出すことになる。
 各イベントにおいて、処理手順は同じで、以下のとおり


 (あ)画面内容を取得し、それをハッシュマップにセットする
    →エラーチェックが必要な場合、ここでチェックする

 (い)処理(モデル)を呼び出す

 (う)次の画面表示を行う
    ・再描画の場合は、再描画ルーチン(DispAppDat)を
    ・違う画面に行く場合は、画面生成して、
    ・必要ならfreeAppDataで画面を消す


   なお、今回、new 画面クラス(共有領域);(例 new gamen2(map); )
   のように、共有領域のハッシュマップ(map)を引数にして生成すると、
   この中で、初期化(initAppData)処理をするようにしてある。




●画面クラス(ビュー部分)での処理
 コントローラー以外の画面クラスは、前回までに説明したとおり。
 なお、再描画処理(DispAppData)で、共通領域から値をとってきて、
 画面表示しているようになっている。

 この共通領域は、生成時に、コンストラクタの引数として渡され、
 モデルやコントローラーで値がセットされる

 ダーティフラグを項目ごとに使うと、修正されたところだけ再描画とかできるが
 今回は面倒なので、そこまでしていない





●アプリでの呼び出し(test.java)
 ここでは、
 1.共通領域を設定する
 2.それに値設定が必要なら、値を設定する
 3.モデルクラスを生成し、共通領域に入れる
    →アプリで1つの場合。
     画面1つにつき1モデルのようなケースでは
     画面生成時になるので、ここでは作らない。
 4.初めに呼び出したい、第一画面を生成する
 というかたちになる。これをまとめたのが上記test.javaのmainメソッドである。




 説明はこんなかんじ。

 というわけで、大体書き方はきまっている。ので、自動化(Excelに、画面部品の種類や位置をかき、画面クラスを自動的に書き出す)もできますが、それについては、今後、画面作成の手順を(上記では、今まで説明したところは省略しているのでそこを含めて全部)まとめた後に行います。

 次回は、そのまとめをするか、それともswingなど、他のものを使った場合について書くか。。現在検討中です。



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

BREWで複数画面を開発する場合の方法論(その14:共通領域に文字以外のものも入れる-その2)

2006-10-20 14:51:42 | ケータイ

 シリーズBREWで複数画面を開発する場合の方法論で、カオル姫方式2ndと書いていたものの説明です。前回、ソースをだしたので、今回はその説明です。

 なお、説明に入る前に、カオル姫方式2ndはカオル姫方式を拡張したものなのですが、どこを拡張したかというと、いままで(BREWカオル姫方式)は文字列だけしか共有領域にいれてなかったのを、今度はなんでもいれてしまう、とりあえず画面の構造体を入れるようにしたところです。



■新規構造体の作成(IKHMap.h
 ユーザーのメモリ作成、メモリ解放領域を呼び出すときの引数として、IKHUserというものを宣言しています。これは

typedef struct _IKHUser
{
  void  *pMe;  // 渡すもの
  int  kind;  // 項目の種類
  int  size;  // 数
  void  *val;  // 値
} IKHUser;

となっています。kindの値に基づき、ユーザーが定義したメモリ作成、メモリ解放領域を呼び出します。sizeは個数です(配列にする場合の要素数)。

 そして生成の場合はvalに値を設定するわけですが、成功した場合は、valに、確保したメモリのポインタを、失敗した場合はNULLを設定します。

 逆に解放の場合は、成功したらvalをNULLに(解放したのだから、NULL)、失敗したら、そのままなにもしない(結果として渡したときの値になっている)を設定します。

 なお、pMeは、メモリ確保において必要な変数のポインタで、これは、IKHMap_Createの第三引数で設定します。普通はこれに、アプリの構造体のポインタ(例だとfukusu1 *pMe)を設定しておきます。

■IKHMapの関数修正(IKHMap.h

●IKHMAP_Createの第三引数追加
 IKHMAP_Createに第三引数を追加し、ここに、ユーザーが定義したメモリ生成、解放の際に必要な値のポインタを指定してもらいます。ふつうは、アプリの構造体のポインタ(例だとfukusu1 *pMe)を設定しておきます。

 これを

  pMe->pUPara =  pUser;

 というカタチで受け取っています。


●メモリ生成IKHMAP_MakeAreaで、ユーザー生成関数を呼び出す

 ユーザーのメモリ生成関数は、pMe->pUserInitに設定してもらっているので、
 それを呼び出します。その際、IKHUser構造体のものを引数とするので、
 それに値を設定します。


●メモリ生成IKHMAP_FreeAreaで、ユーザー解放関数を呼び出す

 ユーザーのメモリ解放関数は、pMe->pMe->pUserFreeに設定してもらっているので、
 それを呼び出します。その際、IKHUser構造体のものを引数とするので、
 それに値を設定します。




■アプリのヘッダでユーザー構造体の種類追加(fukusu1.h

画面1の構造体、画面2の構造体、画面10の構造体の種類をあらわすため

#define USER_ITEM_GAMEN1 5001
#define USER_ITEM_GAMEN2 5002
#define USER_ITEM_GAMEN10 5010

と宣言しておきます。なお、1とか2は、システムのほうの種類で使っているので、
5000番以上を使っています。

 それと、ユーザー生成、解放関数を作成しますので、それを
プロトタイプ宣言しておきます




■アプリの関数追加、修正(fukusu1.c

●初期化fukusu1_InitAppData
IKHMAP_Createで、第三引数を追加すると同時に、

pMe->pMap->pUserFree = freeFunc;
pMe->pMap->pUserInit = initFunc;

というかたちで、ユーザー生成、解放関数を設定します。

●ユーザー生成・解放関数の作成
pUser->kindにもとづき、
  メモリ生成の場合は、各画面の_InitAppDataを、
  メモリ解放の場合は、各画面の_FreeAppDataを、
呼び出します。いかのようなかんじ

void initFunc(IKHUser *pUser)
{
	fukusu1	*pMe;

	if ( pUser	==	NULL )
		return;

	pMe	= (fukusu1 *)pUser->pMe;

	switch(pUser->kind)
	{
	case	USER_ITEM_GAMEN1:
		gamen1_InitAppData(pMe);
		pUser->val	=	pMe->garea;
		return;
	case	USER_ITEM_GAMEN2:
		gamen2_InitAppData(pMe);
		pUser->val	=	pMe->garea;
		return;
	case	USER_ITEM_GAMEN10:
		gamen10_InitAppData(pMe);
		pUser->val	=	pMe->garea;
		return;
	}

}

void freeFunc(IKHUser *pUser)
{
	fukusu1	*pMe = (fukusu1 *)pUser->pMe;

	if ( pUser	==	NULL )
		return;

	switch(pUser->kind)
	{
	case	USER_ITEM_GAMEN1:
		gamen1_FreeAppData(pMe);
		pUser->val	=	pMe->garea;
		return;
	case	USER_ITEM_GAMEN2:
		gamen2_FreeAppData(pMe);
		pUser->val	=	pMe->garea;
		return;
	case	USER_ITEM_GAMEN10:
		gamen10_FreeAppData(pMe);
		pUser->val	=	pMe->garea;
		return;
	}

}

(上記の>は、本当は半角です)





■各画面での修正(各画面、およびversion.h)
 いままで、画面を生成するために、各画面の_InitAppDataを呼んでいたところを
     IKHMAP_Make(共通領域,画面のキーワード,画面の種類,1);を呼び出し

 いままで、画面を解放するために、各画面の_FreeAppDataを呼んでいたところを
     IKHMAP_Remove(共通領域,画面のキーワード);を呼び出します。

たとえば、第一画面を終了し、第二画面を表示する場合は、こんなかんじ

	IKHMAP_Remove(poya->pMap,"gamen1");
		//	次の画面へ遷移
	IKHMAP_Make(poya->pMap,"gamen2",USER_ITEM_GAMEN2,1);

(上記の>は、本当は半角です)




という修正でできます。
現在公開しているのは、エラー処理とかちゃんとしてないので、
もちょっとちゃんと書いたら、またお知らせします。


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

PC出荷数、HPがDellを抜き世界1位に。DELLはバッテリのリコール問題が影響

2006-10-20 10:03:43 | Weblog

ここのニュース
HP、2006年第3四半期PC出荷数がDellを抜き世界1位に
http://pc.watch.impress.co.jp/docs/2006/1019/hp.htm

によると、(以下斜体は上記ニュースより引用)


 調査会社IDCなどが発表した統計によると、2006年第3四半期におけるPC出荷数で、Hewlett-Packard(HP)がDellを抜き世界1位になった。


だそうです。で、その理由として


IDCでは、DellのノートPCにおけるバッテリのリコール問題が少なからず影響したと見ている。


あちゃー、やっぱり、バッテリー問題は大きい??

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