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

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

YouTubeが「Streams」サービス(リアルタイムで動画共有?)の実験を開始

2006-12-08 23:13:23 | Weblog

ここのニュース
「YouTube見ながらチャットしよう」――YouTubeが実験開始
http://www.itmedia.co.jp/news/articles/0612/07/news097.html

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

米YouTubeは新サービス実験用のサイト「TestTube」を立ち上げた。「試験管」と名付けられたこのサイトはYouTubeのエンジニアやデベロッパーが未成熟な技術の実験を行う場所と定義されている。その第1弾として、YouTubeは「Streams」サービスの実験を開始した。

 「Streams」はリアルタイムで動画体験を共有することを目的としたサービスで、ユーザーは自分のStreamルームを作成し、その場でほかのユーザーと流れている動画について感想を書き込んだり、自分のプレイリストや視聴した動画の中から好きなビデオをQuickListという共有プレイリストに追加したりすることができる。

うん??放送というより、オンラインゲームに近いのか?
(わけのわかんないたとえっすね(^^;)
 。。つまり、他のユーザーと話をするのが目的?)

いまいち、よくわかんないけど、ま、いっか(^^;)


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

仕様書からプログラムソースを生成する方法(Excelの仕様書編 その18:メニュー追加-雛形その2)

2006-12-08 20:08:25 | ケータイ

シリーズ仕様書からプログラムソースを生成する方法の続きです。
前回、メニューを追加した場合の、ヘッダの雛形ファイルのソースを載せました。
今回は、ソースの雛形ファイルの部分なのですが、余計なことを書いていると、字数を超えるので、早速本文に入ります。




●ソースの雛形ファイル(gamen_b_c.txt)について
以下のとおりです
/*=========================================================

FILE: $#$CELL D2$#$.c
==========================================================*/
#define _$#$CELL K2$#$_C
#define _$#$CELL K2$#$_C

#include	"$#$CELL D2$#$.h"

/*==================================*/
//	関数名:$#$CELL D2$#$_HandleEvent		//
//	内容 :イベント処理			//
/*==================================*/
boolean $#$CELL D2$#$_HandleEvent($#$CELL B2$#$* poya,
		 AEEEvent eCode, uint16 wParam, uint32 dwParam)
{  
	$#$CELL D2$#$	*pMe;

	//	チェック
	if ( poya	==	NULL )
		return FALSE;
	if ( ( poya->gno	!=	1 )||
       ( poya->garea	==	NULL ))
		return FALSE;
	pMe	=	($#$CELL D2$#$ *)poya->garea;

	//	項目NULLチェック
$#$REP 5$#$
	if ( pMe->$#$KETA B$#$	==	NULL )
		return	FALSE;
$#$REPEND A$#$

$#$REP 5$#$
$#$IFKETA C,HTMLCTL$#$
	//	フォームのデータ取得
	IHTMLCTL_HandleEvent(pMe->$#$KETA B$#$,eCode,wParam,dwParam);
	if ( pMe->$#$KETA B$#$->text_flg !=	0 )
	{
		return	TRUE;
	}
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	//	テキストエリア
	if ( ITEXTCTL_HandleEvent(pMe->$#$KETA B$#$,eCode,wParam,dwParam) == TRUE )
	{
		return	TRUE;
	}
$#$IFEND$#$
$#$IFKETA C,MENUCTL$#$	
	//	メニュー
	if ( IMENUCTL_HandleEvent(pMe->$#$KETA B$#$,eCode,wParam,dwParam) == TRUE )
	{
		return	TRUE;
	}
$#$IFEND$#$
$#$REPEND A$#$

	//	処理する
	switch(eCode)
	{
	case EVT_KEY:	//	カーソル移動に関するキーイベント処理
		switch(wParam)
		{
		case	AVK_SELECT:
			//	選択キーが押されたときの
			//	処理を書く
			break;
		case	AVK_UP:
			//	UPキーが押されたときの
			//	処理を書く(たいてい、以下のとおり)
			pMe->curno = $#$CELL D2$#$_NextCurItem(pMe,AVK_UP);
			$#$CELL D2$#$_DispAppData(pMe);
			return	TRUE;

		case	AVK_DOWN:
			//	Downキーが押されたときの
			//	処理を書く(たいてい、以下のとおり)
			pMe->curno = $#$CELL D2$#$_NextCurItem(pMe,AVK_DOWN);
			$#$CELL D2$#$_DispAppData(pMe);
			return	TRUE;
		}
	}

	return	FALSE;
}

/*==================================*/
//関数名:$#$CELL D2$#$_InitAppData //
//内容 :領域確保・描画	         //
/*==================================*/
boolean $#$CELL D2$#$_InitAppData($#$CELL B2$#$* poya)
{
	char		*fdata;
	$#$CELL D2$#$	*pMe;
	AEERect		rect;
	AECHAR		*menubuf;
	char		*menuTitle;

	//==========================================//
	//	領域確保			        //
	//==========================================//
	pMe	=	($#$CELL D2$#$ *)MALLOC(sizeof($#$CELL D2$#$));
	if (pMe	==	NULL )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return	FALSE;
	}
	//	アプリ領域へ設定
	poya->garea	=	(void *)pMe;
	poya->gno	=	$#$CELL H2$#$;

	//	初期設定
$#$REP 5$#$
	pMe->$#$KETA B$#$		=	NULL;
$#$REPEND A$#$
	pMe->pIDisplay	= poya->pIDisplay;
	pMe->pIShell	= poya->pIShell;

$#$REP 5$#$
$#$IFKETA C,HTMLCTL$#$
	//==========================================//
	//	表示するHTMLファイルの取得     //
	//==========================================//
	fdata = IHTMLCTL_GetDispFileData(pMe->pIShell,"$#$KETA H$#$");
	if (fdata	==	NULL )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return	FALSE;
	}


	//==========================================//
	//	HTMLViewer生成		       //
	//==========================================//
	//	読み込んだfdataをHTMLViewerに設定する
	if ( (pMe->$#$KETA B$#$ 
		= IHTMLCTL_Create(pMe->pIShell,pMe->pIDisplay))
			==	NULL )
	{
		FREEIF(fdata);
		$#$CELL D2$#$_FreeAppData(poya);
		return	FALSE;
	}

	//==========================================//
	//	HTMLViewerデータ設定	       //
	//==========================================//
	if ( IHTMLCTL_SetDispData(pMe->$#$KETA B$#$,fdata)
		!=	TRUE)
	{
		FREEIF(fdata);
		$#$CELL D2$#$_FreeAppData(poya);
		return	FALSE;
	}

	//==========================================//
	//	追加:HTMLViewer大きさ設定     //
	//==========================================//
	rect.x	=	$#$KETA D$#$;
	rect.y	=	$#$KETA E$#$;
	rect.dx	=	$#$KETA F$#$;
	rect.dy	=	$#$KETA G$#$;
	IHTMLCTL_SetRect(pMe->$#$KETA B$#$,&rect);
	
	//==========================================//
	//	HTMLViewer表示・メモリ解放     //
	//==========================================//
	FREEIF(fdata);
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	//==========================================//
	//	テキストエリア設定	       	    //
	//==========================================//
	if	( ISHELL_CreateInstance( pMe->pIShell, 
		AEECLSID_TEXTCTL, (void**)&pMe->$#$KETA B$#$ ) != SUCCESS )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return FALSE;
	}
	rect.x	=	$#$KETA D$#$;
	rect.y	=	$#$KETA E$#$;
	rect.dx	=	$#$KETA F$#$;
	rect.dy	=	$#$KETA G$#$;
	ITEXTCTL_SetRect(pMe->$#$KETA B$#$,&rect);
	ITEXTCTL_SetProperties(pMe->$#$KETA B$#$,TP_FRAME|TP_MULTILINE);
$#$IFEND$#$
$#$IFKETA C,MENUCTL$#$	
	//==========================================//
	//	メニュー設定		       	    //
	//==========================================//
	if	( ISHELL_CreateInstance( pMe->pIShell, 
		AEECLSID_MENUCTL, (void**)&pMe->$#$KETA B$#$ ) != SUCCESS )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return FALSE;
	}
	rect.x	=	$#$KETA D$#$;
	rect.y	=	$#$KETA E$#$;
	rect.dx	=	$#$KETA F$#$;
	rect.dy	=	$#$KETA G$#$;
	IMENUCTL_SetRect(pMe->$#$KETA B$#$,&rect);
$#$IFEND$#$
$#$REPEND A$#$

$#$IFCELL O3,メニュー一覧$#$
	//==========================//
	//	メニュー項目の表示  //
	//==========================//
$#$IFEND$#$
$#$REP 5$#$
$#$IFCELL O3,メニュー一覧$#$
	menuTitle = "$#$KETA R$#$";
	menubuf = (AECHAR *)MALLOC((STRLEN(menuTitle)+1)*sizeof(AECHAR));
	if ( menubuf	==	NULL )
	{
		$#$CELL D2$#$_FreeAppData(poya);
		return FALSE;
	}
	MEMSET(menubuf,0,(STRLEN(menuTitle)+1)*sizeof(AECHAR));
	STREXPAND(menuTitle,STRLEN(menuTitle),menubuf,
                                (STRLEN(menuTitle)+1)*sizeof(AECHAR));
	IMENUCTL_AddItem(pMe->$#$KETA P$#$,NULL,NULL,$#$KETA Q$#$,menubuf,NULL);
	FREEIF(menubuf);
$#$IFEND$#$
$#$REPEND O$#$

	$#$CELL D2$#$_DispAppData(pMe);

	//	共通領域を設定
	pMe->pMap	=	poya->pMap;

    return TRUE;
}

/*==================================*/
//	関数名:$#$CELL D2$#$_FreeAppData		//
//	内容 :領域のフリー			//
/*==================================*/
void $#$CELL D2$#$_FreeAppData($#$CELL B2$#$* poya)
{
	$#$CELL D2$#$	*pMe;
 
	// 対象かどうかチェック
	if ( poya->gno	!=	1 )
		return;
	if ( poya->garea	==	NULL )
		return;
	pMe	=	($#$CELL D2$#$ *)poya->garea;

$#$REP 5$#$
$#$IFKETA C,HTMLCTL$#$
	//	フリー
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		IHTMLCTL_Release(pMe->$#$KETA B$#$);
		pMe->$#$KETA B$#$	=	NULL;
	}

$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	//	テキストフリー
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		ITEXTCTL_Release(pMe->$#$KETA B$#$);
		pMe->$#$KETA B$#$	=	NULL;
	}
$#$IFEND$#$
$#$IFKETA C,MENUCTL$#$	
	//	メニューフリー
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		IMENUCTL_Release(pMe->$#$KETA B$#$);
		pMe->$#$KETA B$#$	=	NULL;
	}
$#$IFEND$#$
$#$REPEND A$#$

	FREEIF(pMe);

	//	親のエリアをクリア
	poya->garea	=	NULL;


}

/*==================================*/
//	関数名:$#$CELL D2$#$_DispAppData		//
//	内容 :画面の初期表示		//
/*==================================*/
boolean $#$CELL D2$#$_DispAppData($#$CELL D2$#$* pMe)
{
	int	curpos,buhinpos;

	//	初期化
	curpos		=	0;
	buhinpos	=	0;

	//==================================//
	//	リドローする		    //
	//==================================//
	//	ここに、
	//	1.リドローと、
	//	2.次のフォーカス指示を書く
$#$REP 5$#$
$#$IFKETA C,HTMLCTL$#$
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		//	リドロー
		IHTMLCTL_Redraw(pMe->$#$KETA B$#$);
//		カーソル番号pMe->curnoを、htmlの項目順に数えた番号に変換する。
//		その番号をcurposとすると
		IHTMLCTL_DispData(pMe->$#$KETA B$#$,curpos,pMe->$#$KETA B$#$->scr);

//		カーソル番号pMe->curnoから、部品の番号(仕様書のA桁のNo)に
//		変換する。その番号をbuhinposだとすると
		if(buhinpos	==	$#$KETA A$#$)
			IHTMLCTL_SetActive(pMe->$#$KETA B$#$,TRUE);
		else
			IHTMLCTL_SetActive(pMe->$#$KETA B$#$,FALSE);
	}

$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	//	テキストエリアのRedrawやUpdateする
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		//	リドロー
		ITEXTCTL_Redraw(pMe->$#$KETA B$#$);
//		カーソル番号pMe->curnoから、部品の番号(仕様書のA桁のNo)に
//		変換する。その番号をbuhinposだとすると
		if(buhinpos	==	$#$KETA A$#$)
			ITEXTCTL_SetActive(pMe->$#$KETA B$#$,TRUE);
		else
			ITEXTCTL_SetActive(pMe->$#$KETA B$#$,FALSE);
	}
$#$IFEND$#$
$#$IFKETA C,MENUCTL$#$	
	//	メニューのRedrawやUpdateする
	if ( pMe->$#$KETA B$#$	!=	NULL )
	{
		//	リドロー
		IMENUCTL_Redraw(pMe->$#$KETA B$#$);
//		カーソル番号pMe->curnoから、部品の番号(仕様書のA桁のNo)に
//		変換する。その番号をbuhinposだとすると
		if(buhinpos	==	$#$KETA A$#$)
			IMENUCTL_SetActive(pMe->$#$KETA B$#$,TRUE);
		else
			IMENUCTL_SetActive(pMe->$#$KETA B$#$,FALSE);
	}
$#$IFEND$#$
$#$REPEND A$#$

	return	TRUE;
}

//=================================*//
//関数名:$#$CELL D2$#$_NextCurItem		//
//内容 :カーソル移動先を求める	//
//=================================*//
int	$#$CELL D2$#$_NextCurItem($#$CELL D2$#$* pMe,int flg)
{
	//======================================//
	//	次のカーソル移動箇所に		//
	//	ついて、			//
	//	プログラムを書いてください	//
	//======================================//
	return	0;			//	該当なし
}

(上記 < > ¥ は本当は半角)
赤字は、今回のメニューで追加になったところです。
青字は、公開していたものにバグがあったので、直したところです(現在は、修正された形で、公開しています

すみませんですm(__)m




ということで、今回は、ここまで


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

仕様書からプログラムソースを生成する方法(Excelの仕様書編 その17:メニュー追加-雛形その1)

2006-12-08 18:32:03 | ケータイ

シリーズ仕様書からプログラムソースを生成する方法の続きです。

 前回、メニューコントロールの追加について、仕様を書いたので、今回は雛形ファイルを作成します。その前に、メニューの項目が、どのようになるのかについて、具体的に書きたいと思います。




■メニューの項目について
 画面定義で、メニューの項目が、以下のように


各コントロールの下にあるのですが、これが、

に示すように、O桁にコピーされるものとします。

そして、メニュー項目がない場合には、O桁には何もかかれず、
メニュー項目がある場合は、O3に「メニュー一覧」とかかれ、
O桁5行目から、メニュー項目がかかれるものとします。




■雛形ソースについて
 今回メニューコントロールを追加するわけですが、対象は
gamen_b_c.txt,gamen_b_h.txtの2つになります。
 他は、変更ありません

●ヘッダーの雛形ファイル(gamen_b_h.txt)について
以下のとおりです
/*==============================================

FILE: $#$CELL D2$#$.h
================================================*/
#ifndef _$#$CELL K2$#$_H
#define	_$#$CELL K2$#$_H
/*================================================
INCLUDES AND VARIABLE DEFINITIONS
================================================ */
#include "version.h"

#include "AEEModGen.h"   // Module interface definitions
#include "AEEAppGen.h"   // Applet interface definitions
#include "AEEShell.h"    // Shell interface definitions

#include "AEEStdLib.h"		//メモリ関係
#include "AEEFile.h "		//HTMLファイル読み込みに使う
#include "AEEHTMLViewer.h "	//HTMLViewer
#include "AEEWeb.h"
#include "AEEText.h"
#include "AEEMenu.h"

#include	"IHtmlCtl.h"
#include	"$#$CELL B2$#$.h"
#include	"IKHMap.h"


//==================================//
//	定数定義			  //
//==================================//

/*-------------------------------------------------------------------
Applet structure. All variables in here are reference via "pMe->"
-------------------------------------------------------------------*/
// create an applet structure that's passed around. All variables in
// here will be able to be referenced as static.
typedef struct _$#$CELL D2$#$ {
    	IDisplay      *pIDisplay;
    	IShell        *pIShell;
	int			curno;		//	カーソルの番号
	IKHMap			*pMap;		//	共通領域
$#$REP 5$#$
$#$IFKETA C,HTMLCTL$#$
	IHtmlCtl		*$#$KETA B$#$;	//	IHtmlCtl	
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	ITextCtl		*$#$KETA B$#$;	//	テキスト
$#$IFEND$#$
$#$IFKETA C,MENUCTL$#$	
	IMENUCtl		*$#$KETA B$#$;	//	メニュー
$#$IFEND$#$
$#$REPEND A$#$
} $#$CELL D2$#$;

/*-------------------------------------------------------------------
Function Prototypes
-------------------------------------------------------------------*/
#ifdef _$#$CELL K2$#$_C
boolean $#$CELL D2$#$_HandleEvent($#$CELL B2$#$* pMe,
                    AEEEvent eCode, uint16 wParam,uint32 dwParam);
boolean $#$CELL D2$#$_InitAppData($#$CELL B2$#$* pMe);
void    $#$CELL D2$#$_FreeAppData($#$CELL B2$#$* pMe);

		//	画面表示
boolean $#$CELL D2$#$_DispAppData($#$CELL D2$#$* pMe);
int	$#$CELL D2$#$_NextCurItem($#$CELL D2$#$* pMe,int flg);

#else

extern boolean	$#$CELL D2$#$_HandleEvent($#$CELL B2$#$* pMe,
           AEEEvent eCode, uint16 wParam,uint32 dwParam);
extern boolean	$#$CELL D2$#$_InitAppData($#$CELL B2$#$* pMe);
extern void	$#$CELL D2$#$_FreeAppData($#$CELL B2$#$* pMe);

		//	画面表示
extern boolean	$#$CELL D2$#$_DispAppData($#$CELL D2$#$* pMe);
extern int	$#$CELL D2$#$_NextCurItem($#$CELL D2$#$* pMe,int flg);
#endif
#endif

(上記 < > ¥ は本当は半角)
赤字は、今回のメニューで追加になったところです。




このあと、ソースファイルを書いたら、字数を大幅にオーバーしてしまったので、
いったんここできります。


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

TomcatはJavaの1.4,サーブレットは1.5でコンパイルした場合のエラー

2006-12-08 16:36:26 | Weblog

 最近、Javaのシリーズをやってない理由なんですけど、
 今使っているマシンが、Tomcatは、入っているものの、Javaの1.4の環境で、サーブレットは、Javaの1.5の環境で作ってて、コンパイルしなおせばいいんだけど、めんどくさいから、別に、1.5のTomcatの環境を作ろうと思っているので。。

 というショーもない理由からなのですが、(ちなみに、次回は、フォワードではなく、リダイレクトでJSPとサーブレットをつなぐ方法について)そーいえば、TomcatはJavaの1.4,サーブレットは1.5でコンパイルした場合、どーいうエラーが出るかって、書いてない気がしたので、今回その話。




以下のようなエラーが、ブラウザに表示されます。


Apache Tomcat/4.0.3 - HTTP Status 500 - Internal Server Error

--------------------------------------------------------------------------------

type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: パス /test/servlet/shori にサーブレットインスタンスを割り当てることができません
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:415)
at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107)
at java.lang.Thread.run(Thread.java:479)


root cause

java.lang.UnsupportedClassVersionError: shori (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:488)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:106)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1631)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:926)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1243)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:865)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:653)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:396)
at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107)
at java.lang.Thread.run(Thread.java:479)


ここに書いてある

java.lang.UnsupportedClassVersionError: shori (Unsupported major.minor version 49.0)

ってのがそれ、49.0とか書いてあるのが、Javaの内部のバージョンらしく、このバージョンが一致しないと動かない。これはTomcatに限らず、他のJavaのアプリのケースでも、そう。

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

BREWでiアプリ統合作成ツールのための、1イベント1関数化(その5:階層化その2)。

2006-12-08 14:57:53 | ケータイ

シリーズBREWでiアプリ統合作成ツールのための、1イベント1関数化のつづきです。

 今までで、1イベント1関数にして、1つのファイルに、それらイベント関数を複数書くということをやりました。
 そして前回は、そのイベント処理を階層化することについて、考えました。
 で、まず初めに、アプリ-画面間について考えました。

 その方法は、初期化のとき、アプリ_initAppData内で
IEVENTLIST_Add(pMe->pElist,pMe,IEVENTLIST_KIND_GAMEN,10,
          0,0,gamen10_HandleEvent);

のように、各画面における、イベントを処理する関数を設定し、

実際のアプリでは
static boolean event1_HandleEvent(event1* pMe, AEEEvent eCode, 
   uint16 wParam, uint32 dwParam)
{
	if ( pMe	==	NULL )
		return	FALSE;

	if ( pMe->pElist	==	NULL )
		return	FALSE;

        //画面用イベント処理
        if ( IEVENTLIST_DispHandleEvent(pMe->pElist,pMe->gno,
            eCode,wParam,dwParam) == true )
        return TRUE;

	return	IEVENTLIST_HandleEvent(pMe->pElist,eCode,wParam,dwParam);
}

のように、まずはじめに、画面用のイベント処理(IEVENTLIST_DispHandleEvent)で
画面イベントを処理してら、アプリのイベント処理(IEVENTLIST_HandleEvent)を
行うというものでした。。




■しかし、これって結局

 でも、動作まで考えると、結局、画面用のイベント処理(IEVENTLIST_DispHandleEvent)
でやっていることは、各画面のイベント処理関数を呼び出すことと同じ、つまり、
いままで、やってきたように
	switch(pMe->gno)
	{
	case	1:
		ret = gamen1_HandleEvent(pMe,eCode,wParam,dwParam);
		break;
	case	2:
		ret = gamen2_HandleEvent(pMe,eCode,wParam,dwParam);
		break;
	case	10:
		ret = gamen10_HandleEvent(pMe,eCode,wParam,dwParam);
		break;
	}

てなことを、中でやっているだけです。
(これは、1つの画面しか出てないことを前提にしている場合、複数画面表示して、
それがイベント処理するって場合は、switchのかわりにfor文にして、全部にイベントを
通知する)

 ってことは、別にかっこよく書く必要性がなければ
(HandleEventのところにずらずら書いてもいいなら)、
static boolean event1_HandleEvent(event1* pMe, AEEEvent eCode, 
   uint16 wParam, uint32 dwParam)
{
	if ( pMe	==	NULL )
		return	FALSE;

	if ( pMe->pElist	==	NULL )
		return	FALSE;

        //画面用イベント処理
	switch(pMe->gno)
	{
	case	1:
		ret = gamen1_HandleEvent(pMe,eCode,wParam,dwParam);
		break;
	case	2:
		ret = gamen2_HandleEvent(pMe,eCode,wParam,dwParam);
		break;
	case	10:
		ret = gamen10_HandleEvent(pMe,eCode,wParam,dwParam);
		break;
	}
	//	処理した結果、gnoが-1になったら終了
	if ( pMe->gno	==	-1 )
	{
		ISHELL_CloseApplet(pMe->pIShell,FALSE);
		return	TRUE;		
	}
	if ( ret	==	TRUE)
		return	TRUE;

	//	アプリ全体の処理
	return	IEVENTLIST_HandleEvent(pMe->pElist,eCode,wParam,dwParam);
}

みたいなかんじで、画面用イベント処理のところに、各画面のイベント処理関数を書き並べて、最後に、アプリ全体の処理を書いてしまってもOKってことになります。

 この方が分かりやすいし、修正しやすいし、話として面倒でないので、
とりあえず、こうしておきます。




■画面-コントロール間は?

ってことは、同じように、画面、コントロール間も、
static boolean gamen1_HandleEvent(event1* poya, AEEEvent eCode, 
   uint16 wParam, uint32 dwParam)
{
	gamen1	*pMe;

	//	チェック
	if ( poya	==	NULL )
		return FALSE;
	if ( ( poya->gno	!=	1 ) ||
	     (poya->garea	==	NULL ))
		return FALSE;
	pMe	=	(gamen1 *)poya->garea;

        //コントロール用イベント処理
	if ( pMe->pHc1	!=	NULL )
	{
		IHTMLCTL_HandleEvent(pMe->pHc1,eCode,wParam,dwParam);
		if ( pMe->pHc1->text_flg !=	0 )
		{
			return	TRUE;
		}
	}

	if ( pMe->pText1 !=	NULL )
	{
		if ( ITEXTCTL_HandleEvent(pMe->pText1,
				eCode,wParam,dwParam) == TRUE )
		{
			return	TRUE;
		}
	}

	//	画面全体の処理
	return	IEVENTLIST_HandleEvent(pMe->pElist,eCode,wParam,dwParam);
}


のように、各コントロールごとに処理して、その後、画面全体の処理をするということになります。

 もちろんこの場合、
・画面ごとに、イベント処理リストpElistをもち、
・画面のinitAppDataで、画面用のイベントを追加し
・画面のFreeAppDataで、画面用のイベントを解放します。




■実は。。。

 で、とりあえず、これでよさそうなので、無理やり、これでいいことにして、とりあえず話を先に進めます。

 実は、画面のinitAppDataで、アプリのイベント処理リストに、その画面のイベント処理関数を登録し、画面のFreeAppDataで解放すれば、全部をずらずら並べなくてもいいし、修正も楽です。

 また、コントロールのHandleEventで、TRUEが帰ってきても、Falseが帰ってきても、同じ処理をさせたい場合、どうするのか?という問題はあります。

 あるんですけど、その対策まで書いていると、できたソースをみたとき、
あまりにも、関数に隠蔽されすぎてしまって、なにやってるか、わかりにくくなってしまい
逆に修正しにくくなるので、とりあえず、これはこれでよしとして、
話を先に進めます。




 ということで、方針は決まったので、今度は、実際にプログラムに落として言ってみたいと思います。



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

富士通の(要件定義も含めた)全開発ドキュメント標準が公開されているが、その場所とか

2006-12-08 13:41:53 | 開発ネタ

 昨日、ウィリアムのいたずらが、ヒアリングで聞き出した業務内容をアクティビティ図等に結びつける、まとめ方のカードっていうのを示したけど、それと、世間のドキュメントとの関係っていうのも示さないと、どうして、こっちが優れているかがわかんないと思う。

 なので、そのドキュメントの構造を全部書いた後で(まだ未完)、世間のドキュメントと比較してみたいと思う。

 といっても、世間のドキュメントって?っていうことになるが、

 富士通は、開発で使うドキュメントが標準化されていて、そのドキュメントが公開されている。
 もちろん、ウィリアムのいたずらが昨日書いた、要件定義部分に関しても、公開されているわけだ(SA工程っていうのが、それにあたる)。

 なので、将来、それと比べてみたいと思う。




 で、その富士通の全開発ドキュメント標準が公開されている場所だが、

こちら
標準化規約
1.ComponentAA開発標準
http://www.fujitsu.com/jp/solutions/infrastructure/dynamic-infrastructure/sdas/technology/develop-guide/1-caa/


 ComponentAAっていうのは、富士通のシステム開発体系(SDAS)において、
 J2EEベースでの開発を行う場合の、開発体系になる。




 で、それはさておき、ドキュメントについてだが、
 「ComponentAA開発標準 ドキュメント標準編1.0a版ダウンロード」
 って書いてあるところ(表の上)をクリック、

 アンケート(名前とかは書かない)に答え、

 そのあと、使える範囲について書いてある
(使うのはOK,だけど、このドキュメントそのものを販売しちゃX)
 ので、それに同意すると、

 ダウンロード用のダイアログが表示されるので、
 PDF版、WordとExcel版、好きなほう(あるいは両方)
 をダウンロードしてくださいませ。

 exeファイルがダウンロードできるので、それを実行すると、自己解凍する




 フォルダでSAとかUIとか出てくる意味は、上にURLを書いた
 ページの中の表を見てください。そうすると、書いてあります。

 なお、工程のSS以降で出てくる、CBS、CBMについて。。

 富士通において、J2EEにおける開発体系は、ComponentAAだが、
 実際に開発に利用するJ2EEフレームワークは、Interstageというものになる(なお、開発に使うツールなどはApWorksという。Interstageは、開発環境、実行環境すべてを含んだJ2EE環境の呼び名)。

 ちなみに、アプレットを使った話がClient Jになる。

 で、J2EEの場合、EJBを使って開発することになるが、EJBは、
 セッションBeanとエンティティBeanにわかれる
 (これは、富士通だけでなく、一般論)

 このうち、セッションBeanに近い役割をするのは、CBS、
 エンティティBeanに近い役割をするのが、CBMになる。

 そして、CBS、CBM間でやり取りするデータ
 (このブログ風にいうと、カオル姫方式でやる、共通領域)が、
 Msgスキーマになる。

 SQLファシリティとは、CBS,CBMにおいて、SQLを直接発行する場合に利用する。




 富士通以外の、他の会社のやつが、みつかんないんだよねー・・・

 って、公開しないほうがふつうなのか(^^;)


<<2016年7月10日 追加>>

この記事を書いてから、10年がたち、状況が変わりました。
これらの書類は、業界的に標準化が試みられ、「発注者ビューガイドライン」という
名前で一度まとまりました。

富士通の総合システム開発体系「SDAS」
http://www.fujitsu.com/jp/solutions/infrastructure/dynamic-infrastructure/sdas/

の右側からアクセスできます。

・・・が、その後、紆余曲折を経て、「発注者ビューガイドライン」は

「機能要件の合意形成ガイド」
https://www.ipa.go.jp/sec/softwareengineering/reports/20100331.html

となりました。業界標準の開発ドキュメントというと、これになります。

一方、ComponentAAは、自動生成の側面も持っています。当時ComponentAAをもとにした
自動生成ツールというのがあったのですが、その後、富士通は、
INTARFRM(インターファーム)と、Interdevelop Designerという2つの自動生成方法を生み出していきます。これらが富士通の超高速開発の流れになっていきます。
 同様のツールとして、IBMのFDLがあります。これは、別エントリで詳しく書いてあります。



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

ニフティが上場したけど。。。ココログ、結局元に戻すではねえ(^^;)

2006-12-08 10:09:32 | Weblog

ニフティが昨日上場したけど
ニフティが東証2部上場、初値は公開価格を1.9%下回る
http://headlines.yahoo.co.jp/hl?a=20061207-00000004-tcb-biz


というように、初値は公開価格以下だし、その後もぱっとしない。。。

まーねー、ニフティがやってるココログが
上場している日にメンテナンス中、
さらに、
「ココログ」53時間メンテ中に問題発生、元に戻して再開
http://www.itmedia.co.jp/news/articles/0612/07/news088.html

って、おーい!!って感じだもんねえ。。。

がんばれにふてぃ!!


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

日本のコンテンツ産業の将来は?「代々木アニメーション学院」運営会社が倒産

2006-12-08 01:53:31 | Weblog

ここのニュース
代アニ:民事再生法適用を申請 負債総額約22億円
http://headlines.yahoo.co.jp/hl?a=20061207-00000005-maia-ent

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


 アニメ専門校「代々木アニメーション学院」を運営する「代々木ライブ・アニメション」(東京都渋谷区、石川良一社長)は6日、東京地裁に民事再生法の適用を申請した。


ただし

学校運営を継続するため、民事再生法適用を申請したといい、06年度の残りの授業や07年度の新入生募集も引き続き行うという。


ということなので、学校経営自体には、そうそう影響ないかも。。

でも、「萌え」とか、「ゲーム」とかが盛んになっても、
その人材を育成する学校は倒産っていうわけで。。
日本のコンテンツ産業の将来は。。。大丈夫なの??


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