開発関連の覚書
今までに自分が携わったプロジェクトで関連した記述関連の覚書です。
そのため、公開することを目的にしている訳ではありませんので、多少いい加減なところや、間違っている説明や、情報がかなり古いものもあります。
そのことを踏まえたうえで、ご参考にして下さい。
| タイトル | 概要 | 作成日 | 更新日 |
| swing | swing関連の簡単なサンプル | 2004/04/26 | − |
| JAVA1.4 | java1.4関連の簡単な説明 | 2004/04/26 | − |
| TOMCAT | tomcat設定関連の簡単な説明 | 2004/04/26 | − |
| Struts1.2 | Struts1.2関連の簡単なサンプル | 2004/04/26 | − |
| Struts1.3 | Struts1.3関連の簡単なサンプル | 2007/03/12 | − |
| Cactus | Cactus関連の簡単な説明 | 2004/04/26 | − |
| Ajax | Ajax関連の簡単な説明 | 2007/12/19 | − |
| Selenium | Selenium関連の簡単な説明 | 2007/03/26 | − |
| BREW | 某大手通信会社のプロジェクトで初めてBREWを使いました。 | 2006/12/01 | 2006/12/01 |
| SQL関連 | SQL関連の簡単な覚書 | 2009/02/12 | − |
| テーブル設計 | 某大手求人広告出版会社のプロジェクトで、テーブル設計を担当した時の設計手順をまとめてみました。 | 2007/01/25 | 2007/01/25 |
| MFC | MFCに関する覚書です。各アプリケーションのソース公開をしている共通関数の説明になります。 ソースを見たほうが理解が早い方は、ソースをダウンロードして下さい。 |
− | − |
| C++Builder3 | C++Builder3に関する覚書です。 | − | − |
| 16ビット版アセンブラ | 仕事ではアセンブラに関わる事は全くありませんでした。趣味でPICボードのプログラムをしていた際に、勉強のためにまとめてみました。 | 2007/01/25 | − |
| LINUX関連 | 忘れた頃に、LINUX関連の開発に携わることがあるので、簡単にまとめてみました。 | 2007/09/13 | − |
| 家電制御 | 趣味で作成した家電を制御するWEBシステムの構築方法。 | 2007/01/25 | − |
| その他 | インストールなどに関する情報。 | 2007/03/25 | 2007/03/25 |
java.awt.Image off_img = null;
Graphics off_g = null;
this.prepareImage( img, バッファサイズX, バッファサイズY, this);
off_img = createImage(バッファサイズX, バッファサイズY);
off_g = off_img.getGraphics();
public void paint( Graphics g ) {
super.paint(off_g);
off_g.描画メソッド
g.drawImage(off_img,0,0,this);
}
Table table = new JTable(model); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
int[] col = {10,10,10,10,};
Table table = new JTable(model);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
TableColumnModel colModel = table.getColumnModel();
for( int loopCounter=0; loopCounter TableColumn tableCol = colModel.getColumn(loopCounter);
tableCol.setPreferredWidth( col[loopCounter] );
}
class NoEditTableModel extends DefaultTableModel {
public NoEditTableModel( String[][] data, String[] colmun ) {
super(data, colmun);
}
public boolean isCellEditable(int rowIndex,int colmunIndex) {
return false;
}
}
リスナーを追加したいオブジェクト.addMouseListener(
new MouseListener() {
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){} } );
JOptionPane.showMessageDialog(null, "ここにメッセージを設定します。", "ERROR", JOptionPane.ERROR_MESSAGE);
Process proc = Runtime.getRuntime().exec("C:\\Temp\\xxxx.exe");
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = "";
while ( (line = in.readLine()) != null )
{
System.out.println(line);
}
in.close();
proc.waitFor();
proc.destroy();
アプリケーションで例外処理を行っていない場合には、アプリケーションサーバーで用意されているエラーページ(通常は例外情報)が表示される。
このエラーページでなく、オリジナルのエラーページを表示するには、WEB.XMLに以下の設定を追加する。
<web-app> <error-page> <error-code>404</error-code> <location>/error/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error/error.jsp</location> </error-page> <error-page> <exception-type>javax.servlet.ServletException</exception-type> <location>/error/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.StackOverflowError</exception-type> <location>/error/error.jsp</location> </error-page> </web-app>
アプリケーションサーバーには、サーブレット起動時に予め定義したパラメータを渡すことができる。
<web-app> <servlet> <servlet-name> サーブレットエイリアス名 </servlet-name> <servlet-class> サーブレット名 </servlet-class> <init-param> <param-name>KEY</param-name> <param-value>初期値のデータ</param-value> </init-param> </servlet> </web-app>
<web-app>
<servlet-mapping>
<servlet-name>jsp </servlet-name>
<url-pattern>*.txt</url-pattern>
</servlet-mapping>
</web-app>
設計の手順、方法は、色々な種類があります。私の場合には、ほとんどのプロジェクトでは詳細設計からの参画がほとんどなので、正式に一連のフェーズを経験したことがありません。
そんな自分に、2006年12月の中旬から、テーブル設計を担当することになりました。
もちろんテーブル設計も初めて経験です。
不安もありますが、担当者になってしまったからには、やるしかありません。どの仕事もそうでしょうが、仕事を選べないというのは、本当に辛いです。でも、信用されているから、一人でこのような仕事を任されたんだと自分を励ましながらがんばりたいと思います。
まずは、代表的な設計手順を知るために、以下にまとめてみました。
| No | 大機能 | 中機能 | 小機能 | 論理名称 | 物理名称 | 属性 | 桁数 |
| 1 | ○○機能 | □□機能 | △△機能 | ユーザー名称 | user_name | 文字列 | 40 |
| 2 | ○○機能 | □□機能 | △△機能 | 生年月日 | birthday | 日付型 | - |
| 略 | 略 | 略 | 略 | 略 | 略 | 略 | 略 |
| 50 | ○○機能 | □□機能 | △△機能 | 請求金額 | amount | 数値型 | 11,0 |
while(true) {
//ゲーム処理をここに記述
while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) {
if(::GetMessage(&msg,NULL,NULL,NULL)) {
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
}
// 乱数系列の変更 srand((unsigned) time(NULL)); int startRand = rand() % 10 + 1;
/*---------------------------------------------------------------------*/
/* (HANDLE) */
/* Open( BSTR lpComName ) */
/* [機 能] : RS232Cポートをオープンして、バッファを初期化する */
/* [引 数] : lpComName(BSTR) : オープンするRS232Cポート名 */
/* (例:com1) */
/* [戻り値] : hRsFd(HANDLE) : RS232Cのファイルディスクプリタ */
/* ( -1 の場合はエラー) */
/*---------------------------------------------------------------------*/
int CRs232c::Open( LPSTR lpComName )
{
// RS232Cポートのオープン
hRsFd = CreateFile( ( LPSTR )lpComName, GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL );
if ( hRsFd == INVALID_HANDLE_VALUE )
{
dwErrNo = GetLastError();
return( ( HANDLE )-1 );
}
return 0;
}
/*---------------------------------------------------------------------*/
/* (int) */
/* Init( int BaudRate, int ByteSize, */
/* int StopBits, int Parity, BOOL XONOFF ) */
/* [機 能] : RS232Cポートを初期化する。 */
/* [引 数] : hRsFd(HANDLE) : ファイルディスクプリタ */
/* BaudRate(int) : ボーレート */
/* ByteSize(int) : データ( 4 〜 8 ) */
/* StopBits(int) : ストップビット( 1=1 or 2=1.5 or 3=2 ) */
/* Parity(int) : パリティー */
/* ( 1=EVEN or 2=ODD or 3=NON or 4=MARK ) */
/* XONOFF(BOOL) : XON/OFF制御( TRUE or FALSE ) */
/* [戻り値] : 0(int) : 正常終了 */
/* -1(int) : 異常終了 */
/*---------------------------------------------------------------------*/
int CRs232c::Init( int BaudRate, int ByteSize, int StopBits, int Parity,
BOOL XONOFF )
{
DCB dcb; // DCB構造体
// 現在のRS232C設定情報を取得する
// 取得した情報を外部変数に保存する
memset( &OrgDcb, 0x00, sizeof( OrgDcb ) );
if ( GetCommState( hRsFd, &OrgDcb ) == FALSE )
{
dwErrNo = GetLastError();
return( -1 );
}
// 既存情報を内部変数にコピーする
memset( &dcb, 0x00, sizeof( dcb ) );
memcpy( &dcb, &OrgDcb, sizeof( OrgDcb ) );
// 通信設定
dcb.DCBlength = sizeof( DCB ); // DCB構造体サイズ
dcb.fAbortOnError = TRUE; // アボートエラー設定
dcb.BaudRate = BaudRate; // ボーレート設定
dcb.ByteSize = (BYTE)ByteSize; // データビット設定
dcb.fOutX = XONOFF; // XON設定
dcb.fInX = XONOFF; // XOFF設定
dcb.fBinary = TRUE; // バイナリー転送(WindowsNTは必ずTRUE)
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
dcb.fDsrSensitivity = FALSE;
dcb.fTXContinueOnXoff = TRUE;
dcb.fErrorChar = FALSE;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.StopBits = TWOSTOPBITS;
// パリティ設定
switch( Parity )
{
case 1 : // 偶数パリティー
dcb.fParity = TRUE;
dcb.Parity = EVENPARITY;
break;
case 2 : // 奇数パリティー
dcb.fParity = TRUE;
dcb.Parity = ODDPARITY;
break;
case 4 : // マーク
dcb.fParity = TRUE;
dcb.Parity = MARKPARITY;
break;
default : // パリティーなし
dcb.fParity = FALSE;
dcb.Parity = NOPARITY;
break;
}
// 設定
if ( SetCommState( hRsFd, &dcb ) == FALSE )
{
dwErrNo = GetLastError();
return( -1 );
}
// RS232Cバッファの初期化
PurgeComm( hRsFd, PURGE_TXCLEAR|PURGE_RXCLEAR );
// 正常終了
return( 0 );
}
/*---------------------------------------------------------------------*/
/* (int) */
/* Close( void ) */
/* [機 能] : RS232Cポートをクローズする。 */
/* [引 数] : hRsFd(HANDLE) : ファイルディスクプリタ */
/* [戻り値] : 0(int) : 正常終了 */
/* -1(int) : 異常終了 */
/*---------------------------------------------------------------------*/
int CRs232c::Close( void )
{
// RS232Cポートがオープンされているかチェックする
if ( hRsFd <= 0 )
return( 0 );
// RS232Cのクローズ
if ( CloseHandle( hRsFd ) != TRUE )
{
dwErrNo = GetLastError();
return( -1 );
}
// 正常終了
return( 0 );
}
/*---------------------------------------------------------------------*/
/* (int) */
/* TimeOutSet( HANDLE hRsFd, DWORD dwReadTimeOut, */
/* DWORD dwWriteTimeOut ) */
/* [機 能] : RS232Cの操作(read,write)に関するタイムアウト時間 */
/* を設定する。 */
/* [引 数] : hRsFd(HANDLE) : ファイルディスクプリタ */
/* dwReadTimeOut(DWORD) : 読込みのタイムアウト設定値(m秒) */
/* dwWriteTimeOut(DWORD) : 書込みのタイムアウト設定値(m秒) */
/* [戻り値] : 0(int) : 正常終了 */
/* -1(int) : 異常終了 */
/*---------------------------------------------------------------------*/
int CRs232c::TimeOutSet( DWORD dwReadTimeOut, DWORD dwWriteTimeOut )
{
COMMTIMEOUTS tmo; // タイムアウト設定構造体
// タイムアウトの設定
tmo.ReadIntervalTimeout = 0;
tmo.ReadTotalTimeoutMultiplier = 0;
tmo.ReadTotalTimeoutConstant = dwReadTimeOut;
tmo.WriteTotalTimeoutMultiplier = 0;
tmo.WriteTotalTimeoutConstant = dwWriteTimeOut;
if ( SetCommTimeouts( hRsFd, &tmo ) == FALSE )
{
dwErrNo = GetLastError();
return( -1 );
}
// 正常終了
return( 0 );
}
/*---------------------------------------------------------------------*/
/* (void) */
/* BuffReset( HANDLE hRsFd ) */
/* [機 能] : RS232Cのバッファを初期化する。 */
/* [引 数] : hRsFd(HANDLE) : ファイルディスクプリタ */
/* [戻り値] : 無し */
/*---------------------------------------------------------------------*/
void CRs232c::BuffReset( void )
{
// RS232Cバッファの初期化
PurgeComm( hRsFd, PURGE_TXCLEAR|PURGE_RXCLEAR );
}
/*---------------------------------------------------------------------*/
/* (int) */
/* Write( BSTR bsBuff, DWORD dwSize ) */
/* [機 能] : RS232Cに指定された情報を書き込む。 */
/* [引 数] : hRsFd(HANDLE) : ファイルディスクプリタ */
/* bsBuff(BSTR) : 書き込む情報 */
/* dwSize(DWORD) : 書き込む情報のバイト数 */
/* [戻り値] : dwSndSize(int) : 実際に書き込んだバイト数 */
/* ( -1 の場合はエラー) */
/*---------------------------------------------------------------------*/
int CRs232c::Write( LPSTR bsBuff, DWORD dwSize )
{
DWORD dwSndSize; // 書き込んだサイズ
// RS232Cへデータを書き込む
if ( WriteFile( hRsFd, bsBuff, dwSize, &dwSndSize, NULL ) == FALSE )
return( -1 );
// 正常終了
return( ( int )dwSndSize );
}
/*---------------------------------------------------------------------*/
/* (int) */
/* Read( BSTR* bsBuff, DWORD dwSize ) */
/* [機 能] : RS232Cから指定されたバッファに情報を読込む。 */
/* [引 数] : hRsFd(HANDLE) : ファイルディスクプリタ */
/* bsBuff(BSTR) : 読込んだ情報の格納先 */
/* MaxBuffLen(int) : 読込む情報の最大バイト数 */
/* [戻り値] : dwRcvSize(int) : 実際に読込んだバイト数 */
/* ( -1 の場合はエラー) */
/*---------------------------------------------------------------------*/
int CRs232c::Read( LPSTR bsBuff, int MaxBuffLen)
{
DWORD dwRcvSize; // 読込みサイズ
LPSTR lpBuff; // バッファ
// 変数の初期化
lpBuff = ( LPSTR )bsBuff;
// RS232Cからデータを読込む
if ( ReadFile( hRsFd, ( LPVOID )lpBuff, MaxBuffLen, &dwRcvSize, NULL ) == FALSE ){
dwErrNo = GetLastError();
return( -1 );
}
// 正常終了
return((int) dwRcvSize );
}
CODE SEGMENT ASSUME cs:CODE,ds:CODE ORG 100H START: mov ah,09H mov dx,OFFSET MSG int 21H mov ah,4CH int 21H MSG DB "HELLO WORLD", 0DH, 0AH, '$' CODE ENDS END START