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

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

開発の初めから順番に書いていってみる その50:プログラミング(12)自動生成決定表3

2007-05-28 16:54:22 | Weblog

 シリーズ「開発の初めから順番に書いていってみる」の続きです。
 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 現在プログラミングです。
(プログラミング以前は、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm)

 プログラミングでは決定表と自動生成のお話をします。
 現在、決定表の自動生成をやっています。

 仕様とサンプルについては前々回
 入力用となる作業用の仕様書は、前回やりましたので、
 今回は、雛形シートです。




■その前に

 その前に、前回の修正というか、つけたし。
 配列のところ、最後以外は、,(カンマ)で区切るのですが、この処理、
 L桁に、カンマをもち(最後だけなにもかかない)このL桁を出力したほうが、やりやすいので、そのようにしました。
 そうすると、作業用仕様書は、こちら





■雛形シート

それをもとに、雛形シートをつくると、こうなります。
import java.util.*;

/**
 * 
 * 決定表のコントロール部分
 */
public class  $#$CELL B2$#$Cntl {

	/*
	 * 右側の上のYN
	 */
	public static final String[] zyoken_list={
$#$REP 5$#$			"$#$KETA J$#$"$#$KETA L$#$
$#$REPEND J$#$
};

	/*
	 * 右側の下の実行内容
	 */
	public static final String[] todo_list={
$#$REP 5$#$			"$#$KETA K$#$"$#$KETA L$#$
$#$REPEND K$#$
};

	/*
	 * 	決定表の実行処理
	 */	
	public int execute(HashMap map) 
	{
		//======================//
		//	データ取得     //
		//======================//
$#$REP 5$#$
$#$IFKETA H,i$#$
		int	$#$KETA G$#$	=	0;
		try
		{
			String buf =	(String)map.get("$#$KETA G$#$");
			$#$KETA G$#$	=	Integer.parseInt(buf);
		}
		catch(Exception e)
		{
			e.printStackTrace();
			return	-1;
		}		
$#$IFEND$#$
$#$IFKETA H,S$#$
		String	$#$KETA G$#$ = (String)map.get("$#$KETA G$#$");
		if ( $#$KETA G$#$	==	null )
		{
			return	-1;
		}
$#$IFEND$#$
$#$REPEND H$#$

		//======================//
		//	条件判定	//
		//======================//
		//	条件文をここに設定
		String	zyoken = "";
$#$REP 5$#$
		//	$#$KETA A$#$
		if ( $#$KETA B$#$ )
		{
			zyoken = zyoken+"Y";
		}
		else
		{
			zyoken = zyoken+"N";
		}
$#$REPEND B$#$		

		logout(zyoken);

		//======================//
		//	実行条件の選択 //
		//======================//
		String todo = "----";
		for(int i = 0 ; i < zyoken_list.length ; i ++ )
		{
			if ( zyoken_list[i].equals(zyoken)==	true )
			{
				todo	=	todo_list[i];
			}	
		}
		logout(todo);
		
		//======================//
		//	実行 	      //
		//======================//
		$#$CELL B2$#$Model $#$CELL B1$#$Model=new $#$CELL B2$#$Model();

$#$REP 5$#$
		if ( todo.charAt($#$KETA D$#$)	==	'X' )
		{
			$#$KETA E$#$
		}
$#$REPEND D$#$	

		return	0;
	}

	/*
	 * 	ログ出力
	 */	
	 public void logout(String msg)
	 {
//		System.out.println(msg);
	 }

}

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




■あとは。。

 あとは、前処理の中で、仕様書から、上記の作業用仕様書を作成し、作業一覧シートの中の、仕様書のなまえのところを、作業用仕様書に書き直すことになります。Excelマクロで組むのですが、ここは省略します。

 そしたら、作業一覧シートをうめて、実行するってことになります。




ということで、決定表はおしまい。次は入出力についてです。



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

プログラムやテストデータを自動生成する方法 その13 動作3 。

2007-05-28 14:04:51 | Weblog

 雛形ソースを作成し、Excelの仕様書を用意すると、プログラムのソースやテストデータを生成する方法について説明するシリーズ、「プログラムやテストデータを自動生成する方法」です。

今までに、インストールして、概要、DBの例を説明しました。
 過去のものに関しては
 ここ http://www.geocities.jp/xmldtp/index_zido.htm
 にリンクしてあります。

 今は、動き方について説明しています。
 押されたとき呼び出されるshiyoToFile()の説明でした。結局、関数は
・前処理
・自動生成(makefile)
・後処理
というかたちになっていて、前処理と後処理は関数名はきまっていますが、中身は自由に書くことが出来ます。

 で、前回は、makefileについてかきました。
 この関数は、

・タグをみつけて、そこまでを書き出し、
・見つけたタグについてはchgTagToStrで解析、必要な内容を仕様書から
 もってきて書き出し
・次のタグを探す


という操作をしていると書きました。
今回は、繰り返しと条件の実権方法を示しながら、chgTagToStrを説明します。




■REP~REPENDでの繰り返し方法
 まず、chgTagToStrを説明するまえに、どのようにして、繰り返しを実現しているのかについて説明します。

chgTagToStrは、

 chgTagToStr(タグ,タグの終わりの次の文字,仕様書のシート名)という形で呼び出し、返り値は、次に調べる場所の位置が帰ってきます。

 このとき、REPEND以外では、タグの終わりの次の文字が返ります。
 したがって、chgTagToStrで書き出した後、タグの終わりから次のタグを書き出し、どんどん、タグごとにchgTagToStrで書き出した後、次のタグをさがして・・・というふうになって、最後まで行きます。

 一方、REPENDでは、REPの終わりが返ります。
 したがって、chgTagToStrで書き出した後、REPの初めに戻って、次のタグを書き出し、どんどん、タグごとにchgTagToStrで書き出した後、REPENDにきたら、条件を満たしていなかったら、REPの初めに戻って、次のタグを書き出し、どんどん、タグごとにchgTagToStrで書き出した後・・・REPENDにきて、終了条件を満たしたら、タグの終わりを返すので、次のタグを書き出し・・以下、REPEND以外と同じということになります。

 つまり、繰り返しは、chgTagToStrの返り値をかえることで実現していて、
・REPEND以外はタグの終わり
・REPENDで終了条件を満たしていなければREPのところまで戻る
・REPENDで終了条件を満たしていれば、タグの終わり
 を返すことで、(REPに戻されるから)繰り返しを実現できるということになります。




■ソース

で、chgTagToStrのソースは、こんなかんじ
'//=========================//
'// タグを処理する      //
'//=========================//
Function chgTagToStr(tag As String, next_str_pos As Integer, shname As String) As Integer
    
    If (Mid(tag, 1, 6) = "REPEND") Then
        lpgyo = lpgyo + 1
        cellpos = Replace(Mid(tag, 7), " ", "") & CStr(lpgyo)
        celldata = Sheets(shname).Range(cellpos)
        If (celldata = "") Then
            chgTagToStr = next_str_pos
        Else
            chgTagToStr = lpstr_pos
        End If
        Exit Function
    End If
    
    If (Mid(tag, 1, 3) = "REP") Then
        lpstr_pos = next_str_pos
        lpgyo = CInt(Replace(Mid(tag, 4), " ", ""))
        chgTagToStr = next_str_pos
        Exit Function
    End If
    
    If (Mid(tag, 1, 4) = "CELL") Then
        cellpos = Replace(Mid(tag, 5), " ", "")
        celldata = Sheets(shname).Range(cellpos)
        If (no_out_flg = 0) Then
            outdata = outdata & celldata
        End If
        chgTagToStr = next_str_pos
        Exit Function
    End If
    
    If (Mid(tag, 1, 4) = "KETA") Then
        cellpos = Replace(Mid(tag, 5), " ", "") & CStr(lpgyo)
        celldata = Sheets(shname).Range(cellpos)
        If (no_out_flg = 0) Then
            outdata = outdata & celldata
        End If
        chgTagToStr = next_str_pos
        Exit Function
    End If

    If (Mid(tag, 1, 6) = "IFKETA") Then
        kugiri_pos = InStr(7, tag, ",")
        cellpos = Replace(Mid(tag, 7, kugiri_pos - 7), " ", "") & CStr(lpgyo)
        celldata = Sheets(shname).Range(cellpos)
        chkdata = Mid(tag, kugiri_pos + 1)
        If (celldata = chkdata) Then
            no_out_flg = 0
        Else
            no_out_flg = 1
        End If
        chgTagToStr = next_str_pos
        Exit Function
    End If
    
    If (Mid(tag, 1, 6) = "IFCELL") Then
        kugiri_pos = InStr(7, tag, ",")
        cellpos = Replace(Mid(tag, 7, kugiri_pos - 7), " ", "")
        celldata = Sheets(shname).Range(cellpos)
        chkdata = Mid(tag, kugiri_pos + 1)
        If (celldata = chkdata) Then
            no_out_flg = 0
        Else
            no_out_flg = 1
        End If
        chgTagToStr = next_str_pos
        Exit Function
    End If
    
    If (Mid(tag, 1, 5) = "IFEND") Then
        no_out_flg = 0
        chgTagToStr = next_str_pos
        Exit Function
    End If
    
    chgTagToStr = next_str_pos

End Function

(上記< > ¥は、本当は半角)
上記のプログラムを理解するうえで、以下の変数が重要です

lpstr_pos=REPタグの直後の位置、ループのとき、ここにかえる
lpgyo=現在、仕様書(Excelシート)で、対象にしている行
next_str_pos=タグの終わり(ループ以外はこれを返す)
no_out_flg=書き出すかどうかを決める。IF文で設定する。0のとき書き出し




■IF文の実現

no_out_flgで実現します。普段は0なので、書き出します。
IFKETA,IFCELLで、条件を満たせば、no_out_flgを0=書き出します
みたさないとno_out_flgを1にして、書き出しません。
IFENDで、no_out_flgを0クリア(書き出す)ようにします。





■説明

ということを踏まえ説明します。

基本的に、タグが一致したら、以下の処理を行うということになっています。

●タグがREPENDのとき
 lpgyo(仕様書のチェック行)を次の行にして,
 celldataに、チェック内容を入れます
    (cellposはチェックするセルの位置)。
 もし、チェックデータが何もなければ、そこでループが終わりなので
   タグの後next_str_pos
 データがあれば、繰り返し開始位置lpstr_posをセットして、返ります

●タグがREPのとき
 繰り返し開始位置lpstr_posをREPタグの終わりに、
 lpgyoをとってきて、セットして、返ります

●タグがCELLのとき
 cellposにデータを取ってくるセルの場所をセットし、
 celldataにデータをセットし、
 書き出しの場合(no_out_flg=0)、
   書き出し用バッファ(out_data)に内容をセットします

●タグがKETAのとき
 cellposにデータを取ってくるセルの場所をセットし、
   →この求め方がCELLとちがうだけ
 celldataにデータをセットし、
 書き出しの場合(no_out_flg=0)、
   書き出し用バッファ(out_data)に内容をセットします

●タグがIFKETAのとき
 cellposにデータを取ってくるセルの場所をセットし、
 celldataにデータをセットし、
chkdataに条件を取り出し、
 とってきたデータ(celldata)と書かれている条件(chkdata)が
   一致していたら、書き出しの場合(no_out_flg=0)
   ちがってたら、書き出さない場合(no_out_flg=1)
 をセットします

●タグがIFCELLのとき
 cellposにデータを取ってくるセルの場所をセットし、
   →この求め方がIFKETAとちがうだけ
 celldataにデータをセットし、
chkdataに条件を取り出し、
 とってきたデータ(celldata)と書かれている条件(chkdata)が
   一致していたら、書き出しの場合(no_out_flg=0)
   ちがってたら、書き出さない場合(no_out_flg=1)
 をセットします

●タグがIFENDのとき
 書き出し用(no_out_flg=0)にします。

と、こんなかんじです。




これで、自動生成のプログラムも全部説明しました。
これで、説明は終わりです。
このあと、いつか、自動生成用にExcelシートを今回の例と一緒にまとめるかもしれません。けど、それはたぶん、まだまだ先のことでしょう。

 ということで、ひとまずこのシリーズはおわりということになります。

 なお、今後、「一般的なエディタの作り方」という、違うシリーズを書くことを予定しています。




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

ケータイでマウス風操作もありかもね!

2007-05-28 12:02:24 | Weblog

さすが、松丸アナだ!

5月21日の松丸アナのトレンドたまご、「マウスtoマウス」
これ自体は、(パソコンで使う)マウスのかわりに、
帽子をかぶって息をすってクリックという。。
うーん、使えねーっていうやつなんだけど。。

 松丸アナの取材報告をみてて、
「この会社には、その技術があって・・・」みたいなこと言ってた。。

 そーだよ、普通、帽子かぶったら、
 こうやっては、マウス操作をしないだろう!




 ふつー、帽子の中心になにかマークを入れて、そのマークの動きを画像処理してマウスの動きを判断するだろう。

1.たとえば、志茂田かげきが着そうなド派手な色の帽子の、正面真ん中に、
  それとまったく違う色(補色とか)の星かかんかの目立つマークを
  入れておく。

2.カメラでその様子を撮影し、帽子の色とマークの色をもとに、
  画像処理で、帽子がどこにあって、基準となるマークがどこに
  あるかを判断する

3.マウスを動かしたかったら、横、斜めに頭を振る

4.下を向くと、左ボタンクリック、上を向くと、右ボタンクリック
  急いで何回か振ると、ダブルクリック

5.画像処理で、星の動きを追っていき、それに基づきマウス操作

 なお、派手な色だけだと、志茂田氏は操作できない(>_<!)となるので、帽子は何通りかの色をつくって、それをメニューで選べるようにすると(なので帽子は、自分が着ていたり、背景となる服以外の色を選ぶ)・・
 
これなら、ケータイで自分どりすれば、ケータイでもマウス風の操作が出来るし。。




 さらにいうと、帽子である必要はなく、手袋に色を付けて、

1、人差し指を1本たてたら、その方向にポインタは動く
2.グーにするととまる
3.パーで左クリック
4.チョキで左ダブルクリック
5.ぐわしで、右クリック
  (って、出来ない人は ^^;3本指で右クリックでいいですね ^^;)

っていうことで、ケータイで手袋をはめた手を写真でとればOKでもいいんだけどね(ただ、帽子の利用は手が利用できない人のため・・・なんだけど)




うーん、どっかで、帽子のマウス、画像処理で
やってくれませんかねえ(^^;)

で、そーしたら、松丸アナがまた取材に行って。。

マウス代わりの帽子は、もちろん、テレビ東京ですので、
ケロロ軍曹の帽子であります。
ちゃんとまんなかに星があって・・・

で、それを撮って、マウスを動かすわけですが、
えー、アプリは、水を入れるゲームとか。。
で、マウスで水をどんどん入れていってもらって。。。

松丸アナ、

「水位がどんどん上昇しています!!」

って、ゆうきんファン以外には、一切分からないオチなのでした。。
(って、このオチを書くためにこのエントリを書いていたりする。。)

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

ネット上にデータを保存するサービスは著作権違反判決、要するに日本以外に、会社とサーバ置けば?

2007-05-27 22:02:24 | Weblog

高部真規子裁判長が出した、ストレージ・サービスに対して著作権侵害に当たるとの判断、これについては、ここのブログでも前に取り上げたけど、まだまだ、話題進行中みたい。。

ここの痛いニュース
ネット上にデータを保存するサービスはすべて著作権侵害で違法
http://blog.livedoor.jp/dqnplus/archives/980026.html

(元ねたはここ、また、この事件についてのYAHOOニュースはここ

ちょっと前のブログで、書き足りないところがあるので付け足し説くと、この判決によると、

1.システムの中枢=サーバを所有・管理している
2.所有・管理者からみて、利用者が不特定多数

この場合、行為主体は所有・管理者となり、この人が協会(JASRAC)の許諾を受けない限り、著作権を侵害すると認定

ってことで、レンタルサーバーは違法?ってかいた。
メールサーバーも同じ理屈だろう。実際上記痛いニュースのコメントにも指摘があるし、
「Yahoo!ブリーフケース」とかもだめぽだろう。。

 でも、それは、現状違法ってわけで、
 この判決によると「行為主体が協会(JASRAC)の許諾を受れば」OKなわけだ。。

 つまり、レンタルサーバーもYAHOOもどこも、JASRACにみかじめ料使用料??をはらえばOKってことだろう。。

 多分、JASRAC側から見れば、音楽用DVDとかとかCDとか補償金を払っているので、レンタルサーバーも払え!っていう論理なんだろう。。
 ということは、この判決は、JASRACがお金(補償金)を徴収することにお墨付きを与えたことになる。。

 。。。問題はいくらか?だよね。。安かったら、めんどっちいから払っちゃおうっていうことになるけど。。高くてやっていけないとなったら。。




 ここで、ちょっと頭の体操

 かりに、このストレージサービスでも、レンタルサービスでも、所有・管理している会社が、アメリカにあったら?
 つまり、
1.日本の会社が、アメリカに100%出資の完全子会社をつくり
2.そこに、ストレージだけ置く
3.アメリカの子会社は、日本の会社に、お金の徴収と顧客サービスを依頼する
  →顧客サービスとか、ふつうのサービスは、いままでどおり、日本で行う
4.サーバーの管理だけアメリカで行う。
5.顧客との契約は、アメリカの会社が所有しているサーバーを利用しているのだから
  アメリカの法律に基づいて行うと、契約書の中で明記する

そーすると、アメリカの会社が所有・管理していて、契約もアメリカだから、アメリカの法律が適用されるんじゃあ。。もっとも、顧客サービスは日本の会社が委託されてやるので、なにもかわらないんだけど。。

(要するに、香港のレッドチップの株みたいなもんですな。。)




 で、それ、「アメリカは遠すぎる」けど、どっか貧しい国の日本大使館でやったら?

 どっか貧しい国に会社をつくり、サーバーは、その国の日本大使館において、サーバーを管理する人だけが、日本の大使館にいく(これが儲かるなら、その貧しい国はいっぱい大使館をつくりそうだ ^^;)そーしたら、大使館は治外法権なんじゃあ。。。
 そして、契約はその国の法律に基づいて行うって書けば、その国の法律が適用されることになれば。。。OKなんじゃあ??

 って、どっかなあ?




 ま、結論としていえそうなのは、そーなってくると、ネット関係のビジネスやろうとおもったら、日本にサービスするにしても、アメリカでやったほうがいいってことだ。

 YouTubeは、アメリカにあるからやっていけるんだって、あれが日本の会社だったら。。つぶされていただろう(>_<!)

<<23:50ごろ追加>>

法律的にはここ
ストレージの利用がなぜ著作権侵害なのか
http://nagablo.seesaa.net/article/42935209.html

がくわしいらしい。
前にも書いたけど、このブログは技術関係の人のみ対象にかいているので、法律的なお話はそちらに譲って、ここでは書かないですけど、どーもそれみてると。。
うーん、やっぱ、ネットはアメリカに会社おいてやったほうがよさそう??(^^;)


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

Hello World程度のデータベース(その21:外部スキーマ(5)SQLその4)

2007-05-27 14:41:45 | 土日シリーズ

 情報処理とは何から、データベースの基本的な話(情報処理試験のデータベーススペシャリスト程度の話まで)を書く、土日のシリーズ「Hello World程度のデータベース」です。

 今までで、三層スキーマ構造(概念スキーマ、内部スキーマ、外部スキーマ)の概念スキーマ、内部スキーマをやって、今は、外部スキーマの話、とくにSQLをやってます。

 で、SQLについては、大体こんな内容です。
●レコードの検索   select
  ・1つの表を条件をつけずによむ
  ・WHERE句
  ・ORDER BY
  ・GROUP BYとHAVING
  ・2つ以上の表
  ・結合あれこれ(外部結合、内部結合、自然結合、自己結合)
  ・副問い合わせと限定述語
  ・UNION、INTERSECT,EXCEPT

●レコードの追加   insert
  ・レコードの追加
  ・SELECT文を利用した複数行の追加

●レコードの削除   delete
  ・レコードの削除(WHERE句も含めて)
  ・副問い合わせを使ったもの

●レコードの更新   update
  ・レコードの更新(WHERE句も含めて)
  ・SET句における元の値の利用
  ・副問い合わせを使ったもの

●その他
  ・コミットとロールバック
  ・参照制約
  ・トリガーとストアド・プロシージャ(ストアド・プログラム)


 前回、GROUP BYまでやったので、今日は「2つ以上の表」なのですが、その前に、書き忘れていた、ALLとDISTINCTについて説明します。

なお、前回同様、(1つめの)テーブルは、以下の「社員テーブル」を使います。

CREATE TABLE SHAIN_TBL (
  SHAINID INTEGER NOT NULL,
  SEI VARCHAR(20), 
  SEI_KANA VARCHAR(30),
  MEI VARCHAR(20) ,
  MEI_KANA VARCHAR(30),
  NYUSYANEN  INTEGER,
  KYOYU_SYUBETU INTEGER,
  KYUYO  INTEGER,
  PRIMARY KEY(SHAINID)
);





■ALLとDISTINCT

 ここで、
SELECT NYUSYANEN FROM SHAIN_TBL;

という検索をしたとします。つまり、全員の入社年を出す場合です。
こうなると、同じ同期入社の人が、何人もいると、何回も出てきてしまいます。

2005
2005
2005
2004
2004
2003
2003
2003

のようなかんじ。。
こういうデータがほしいときもあります(後工程で、グラフ化やメジアンを求めたり、いろんな処理をするため、countを使ってまとめられないとき)。
でも、そうじゃなくって
2005
2004
2003

と同じデータは、単一化したい場合もあります
(普通、みんなの入社年が知りたいという場合は、こちらだと思います)

このように、データを単一化する場合は、DISTINCTというのをつかって、

SELECT DISTINCT NYUSYANEN FROM SHAIN_TBL;

と書きます。

 ちなみに、はじめのように全部書く場合は、

SELECT ALL NYUSYANEN FROM SHAIN_TBL;

ともかけるのですが、ALLは省略可能です(DISTINCTもALLもない場合、ALLがデフォルトとなる)。




■2つ以上の表

 2つ以上の表の場合、ORACLEで一般的に書く書き方と、Accessで一般的に書く書き方がちがいます(たぶん、Accessの書き方でORACLEで書いても動くと思うけど)
 で、説明上、Accessのほうが、わかれば、ORACLEのほうは、わかると思うので、Accessのほうで説明します。

 まず、結合する表について。
 こういう表を考えます、会社でイベントをやるときの出席者テーブルを考えます

CREATE TABLE SYUSSEKI_TBL (
  SHAINID INTEGER NOT NULL,
  EVENTID INTEGER NOT NULL,
  PRIMARY KEY(SHAINID,EVENTID)
);

このとき、イベントIDが123のイベントの出席者を出力するとします。
そうすると。。。実際にどういうSQLを書き出すか、AccessでSQLを書いてみましょう。




■AccessでSQLを作る

手順
1.まず、2つのテーブルを作成してください
 このとき、Accessは2つの項目を主キーにすることができなさそうなので、
 あらたに主キーの項目を作っておきます。

2.クエリで、テーブルを定義します。
 今回はSHAINIDが同じもので結合します(2つのテーブルがSHAINIDでつながってる)
 そして、社員テーブルの社員ID,社員姓、名を表示します。
 出席者テーブルのイベントIDが123のイベントの出席者だけだします
 (が、 イベントIDは表示しません)
 という指定は、以下のようになります。


3.これを保存して、再度デザインビューで開いた後で、
  プロダウンメニューで「表示」→「SQLビュー」にするとSQLがでてきます。
こんなかんじ

SELECT SHAIN_TBL.SHAINID, SHAIN_TBL.SEI, SHAIN_TBL.MEI
FROM SHAIN_TBL INNER JOIN SYUSSEKI_TBL ON SHAIN_TBL.SHAINID = SYUSSEKI_TBL.SHAINID
WHERE (((SYUSSEKI_TBL.EVENTID)=123));

なお、「表示」→「デザインビュー」にすると、元に戻ります




■2つの表の場合、どこがちがうのか

では、2つの表の場合、どこが違うのかというと、
・項目名を書くとき、いままで項目名しか書いていなかったけど、
   テーブル名.項目名
 という形で書く。
 なお、テーブル名は省略形で書く方法もあります。

・テーブルをFROM句に書くのですが、

 FROM テーブル1 INNER JOIN テーブル2 ON 条件式

のようなカタチで、テーブルを2つ書いている。
ここで、INNER JOINのほかに、LEFT JOIN,RIGHT JOINとかあるのですが、
それについては、次回です。




ということで、次回は「結合あれこれ(外部結合、内部結合、自然結合、自己結合)」です。
(どこまでかけるかどうかわかんないけど。。)



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

DTPの構造を考える-その9:色 その2 カラーマネジメント

2007-05-26 23:24:51 | Weblog

 土日シリーズ「DTPの構造を考える」です。

 このシリーズ、はじめは、本をトップにして、その下の物理構造、論理構造と組版規則について書きました。

 次に、本という概念をこえ、DTP全体でもつものについて、書いていて、ライブラリ、フォントまできて、色の話で、色全般については前々回したので、今回は、カラーマネージメント。




■カラーマネジメント(カラーマッチング)システムの種類

 カラーマネジメントシステム(CMS=カラーマネージメントシステム/まったくおなじCMSという略語でコンテンツマネジメントシステム(XOOPSなど)を表すこともある)を考える場合、2つの種類を考えないといけません。

・キャリブレーション
 個々のデバイス(画面など)においても、経年変化などによって、発色具合が変わって、色が変わってきてしまう。そこで、個々のデバイスにおいて、同じ色になるように、基準となる色に調整すること。
 基準の色となるものがあって、それと、デバイスの色との見た目を合わせていく。
 といっても、目で見てあわせるだけでなく、そーいう機械がある場合もある。
 あと、詳しい話になると、ソフトウエアキャリブレーション・ハードウエアキャリブレーションのはなしになるけど、それは、こちら

 なお、上記にかいたとおり、経年変化などを直すものであるから、一度買ってやったらOKというものではなく、何度も(定期的に)行うべきものであります。

・キャラクタライゼーション
 上記のものが、1つのデバイスにおける色調整だったのに対し、これは、複数の機器、具体的には、プリンタとスキャナとディスプレイのように、異なる機器間の色を自動的に合わせる方法。そもそも、機器によっては発色できないところもあり(ディスプレイの発色できる空間とプリンタの発色できる空間は異なる)その辺をテキトーじゃなかった、適切に処理する。

 実現方法としては、デバイスプロファイルとよばれる、個々の機器の特性を記述したものがあって、それを読み取って、機器側であーでもないこーでもないと変換をかける。
 そのためには、デバイスプロファイルが標準化されてないと、「なんのこっちゃ?」とわかんないので、こまってしまう。そこで、標準化されたデバイスプロファイルとしてICCデバイスプロファイルというのがある。

 これは、デバイスの特徴をかいたものなので、経年変化とかは関係なく、一回つくれば、基本的にいいっていうことになる。
ここ http://support.adobe.co.jp/faq/faq/qadoc.sv?216943+002
に書かれているように、標準的なプロファイルはデバイスメーカーが提供している。
 このほかに、カスタムプロファイルという自分の環境用にプロファイルをつくることもできる。。。っていわれても大変そうだけど、そーいうものもあるみたいだ。




■デバイスプロファイルの埋め込み

 キャリブレーションは、個々の機材に閉じた話なのでいいが、キャラクタライゼーションを行う場合、たとえば、DTPの編集を行っているデザイン会社、編集プロダクション等と、印刷会社、出力センターでは、違うわけで、ここにデバイスプロファイルを送るには?っていうことになる。

 これは、画像などにデバイスプロファイルを埋め込むことで実現する。Photoshop、Illustrator、InDesignなどなどは埋め込みができる(さっきもリンクしたここの下のほう)。




■MS-Office製品もWindowsXP以降、カラーマネジメントをしているらしい

 で、このカラーマネジメントなのだが、DTPアプリは当然しているのだけど、
 以下の本

 JAGAT認証DTPエキスパート試験 完全対策問題集2006
(有)MD研究会 著

 
 236ページ、問17「Mac,Windowsにおけるカラーマネジメント」
 の問題と解説によると、WindowsXPでWord2002以降は、
 カラーマネージメントをしているらしい。。

 
 へー(^^)

 ただ、そんなことよりも、この問題の出だし。。
 「小笠原君は。。山内印刷。。」ほお、そーきたか(^^;)
 (わかる人にしか、わからない話でごめんなさい。。 
  そーしても気になって、知りたい人は「小笠原 山内 JAGAT」で検索してね ^^;)




ということで、データ構造の説明は、ここまででおしまいです。
次回から、DTPソフトのアルゴリズムについて説明します。


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

レンタルサーバーは、著作権侵害らしい。。。

2007-05-26 21:49:28 | Weblog

ここの判決

JASRAC、勝訴…ネット上に音楽データ保存できる「ストレージ」サービスに、「著作権侵害」判断
http://blog.livedoor.jp/dqnplus/archives/979503.html

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

「システムの中枢になるサーバーは同社が所有、管理しており、同社にとってユーザーは不特定の者。複製と公衆(不特定多数)への送信の行為主体は同社だ」と判断。協会の許諾を受け
ない限り、著作権を侵害すると認定した。

だそうな。

そこのコメントにも何人か書いてあるけど、上記のケースにおいて著作権侵害を構成するものが、

1.システムの中枢=サーバを所有・管理している
2.所有・管理者からみて、利用者が不特定多数

この場合、行為主体は所有・管理者となり、この人が協会(JASRAC)の許諾を受けない限り、著作権を侵害すると認定

1.はレンタルサーバーの場合、レンタルサーバー会社。
2に関して、ダウンロードできるのは、アップロードした個人のみというのではダメで(今回の裁判は、まさにそこで争って、だめだった)所有・管理者からみて、利用者が不特定多数ならアウト。

 えー、レンタルサーバーにアクセスする人なんて、不特定多数なわけで、(じゃなきゃ、ホームページを公開できないわけで)、さらに今回の訴訟より、もっと悪いことに、だれかが、著作権つきのファイルをもし、一時的においてしまっても(って、故意か過失かは別にしたら、今でも、おいてあると思うけど)、それをダウンロードできたら、まさに、不特定多数に送信しているわけで、その場合。。。レンタルサーバーが著作権侵害??

 もっというと、最近、アップローダーが話題になってるけど、システムの中枢がサーバーと考えるなら、もし、アップローダーをレンタルサーバーでやっていたら、そのレンタルサーバー会社が、著作権違反になっちゃわないか。。。?


。。。にっぽん、おわた。




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

NGNで、ケーブルテレビや地上デジタルのテレビは、どーなるんだ?

2007-05-26 20:36:00 | Weblog

今日、NHK放送技術研究所の「技研公開2007」にいってきました。

 みどころは、NGNの説明をしていた、きれいな説明員のおねーさん。。

 って、そーじゃないか。。

 ってことで、(どういうことだ)まず、そのNGN、

 テレビの放送がやっているのですが、放送したものを、すぐに流せるんだそうです。
 つーことは、地上デジタル放送なんかも、リアルタイムで、すぐに流せて見れちゃうんですか(@_@!)

 ってきいたら、「もともと、放送電波が届かないような人のために見れるようにするのが狙いだった」そうな・・総務省的には。。

 つーことは、NGNに入って、なんかわかんないけど、このサービス受けると、テレビ見れちゃうの??

 じゃあ、ケーブルTVって、いらないじゃん。。(^^;)
 それとも、ケーブルTV局がNGNをつかって、いままでのサービスをする??
(あ、ケーブルテレビ局制作の番組があるか ^^;)

 さらに、地上デジタル放送を受信するテレビは。。。
 NGNだと、いらなくなるのか?
 うん、そーじゃなくって、NGNのゲートウエイにテレビをつなぐのか。。
 こんな大画面のテレビはあっても、パソコンはないしなあ
 (あったら、みにくいって、逆に ^^;)

 でも、NGNって、電波じゃないから、東京で大阪の地元テレビとかもみれるのかしら?

 うーん、ぜんぜんよくわかんないけど、
 なんとなく、NGNのテレビにはいったほうが、いろんなことできて、おとくなのかなあ。。

 。。。きれいな、解説員のおねーさんに、だまされてる??

P.S 実際にこのテレビ、現在、NGNの実験のモニターっていうのにあたった人は見れて、そうでない人は、来年はじめからだそうな。(って、解説員のきれいなおねーさんが言っていた)
 で、実際に当たった人のブログを発見

NGNのモニターに選ばれたけれど
http://jun.typepad.jp/junhara/2007/04/post_cb43.html


 うーん、ちょっと大変そうだ(^^;)
 貧乏人のウィリアムのいたずらは、すくなくとも、まだ当分アナログテレビですな。。
 でも、こう考えると、デジタルテレビを買い急ぐ必要ないのかもしれない。
 アナログ放送終了までにNGNがもっと普及して使いやすくなってたら。。。

 それと、ケーブルテレビとNGNは、いろいろ考えられてるみたい
 ここ(PDF) http://www.tca.or.jp/japan/infomation/ngn/20060421/data_3-4-5.pdf


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

「グーグルアースで、めざせパイロット!」っていうけど・・・

2007-05-26 11:00:22 | Weblog

「グーグルアースで、めざせパイロット!」っていうホームページ?があります
ここ http://google.osieru.com/

方法をまとめると(Windows用)

<<Google Earthを入れてない人へ:インストール>>
(入ってる人は、いきなり3へ)

1.グーグルアース(http://earth.google.co.jp/)にいって、
  左脇のダウンロードからダウンロードする

2.ダウンロードしたGoogle_Earth_BZXE.exeを実行して、インストール
  →これでGoogle Earthは、入りました


3.Google Earthを起動したら
(以下斜体は、上記サイトより引用)

グーグルアースのメニュー[ツール]より、[オプション]→[ナビゲーション]タブへとたどり、ナビゲーションモードを飛行制御(G-Force モード)にしてください。


4.左がわ、「ジャンプ」タグにして(たぶん起動時はなってる?)
  そこの「ジャンプ」に空港名を入れる

5.操作は上記サイトに書いてある

 で、羽田空港でやったら。。。
 めがまわるう。。。ぐるぐるまわっちゃうよお(@_@!)


。。。パイロットには、なれなさそうです(>_<!)

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

ヘルメットカメラと「マウスtoマウス」

2007-05-25 18:39:36 | Weblog

前田(みんみん)アナのトレたまで、

かぶっただけで・・・
http://www.tv-tokyo.co.jp/wbs/toretama/070523.html

という「TV電話ユニット搭載ヘルメット」っていうのをやってました。

ヘルメットにカメラとマイクがついていて、ケータイ機能があるので、
話せるというものです。

昔なら、川口隊長がつけて、どっかにいきそうだ(^^;)

番組では、工事現場がどうのこうの。。っていう話のようでしたが、
それよりも、芸人が危険なところにいくのに、これ付けていきそうな気配。。
そーすると、出川哲郎か、エスパー伊藤??

すくなくとも、みんみんアナではない(>_<!)




うーん、でも、ほかに、こーいうかっこをしてくれそうな
テレビ東京のアナウンサーといえば。。
松丸アナだけど、松丸アナは、もっとたいへんなことになってるんだな。。

マウスtoマウス
http://www.tv-tokyo.co.jp/wbs/toretama/070521.html


マウスがわりの帽子。
あたまを振ると、ポインタが動いて、息を吸ったり吐いたりでクリック。
それは、たいへんでしょう。。。
あたま、ぐらんぐらんして、船酔いしそうだ。。

ほかのトレたまより、
かっちょわるくて、たいへんそうで
2人は、かわいそうっていうのは、
ひいき目に見すぎですかね(^^;)

(でも、帽子のマウスは、うーん。。。ないな。。)


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

プログラムやテストデータを自動生成する方法 その12 動作2

2007-05-25 15:39:22 | Weblog

 雛形ソースを作成し、Excelの仕様書を用意すると、プログラムのソースやテストデータを生成する方法について説明するシリーズ、「プログラムやテストデータを自動生成する方法」です。
インストールして、概要、DBの例を説明しました。
 過去のものに関しては
 ここ http://www.geocities.jp/xmldtp/index_zido.htm
 にリンクしてあります。

 前回から、動き方について説明していて、前回は、押されたとき呼び出されるshiyoToFile()の説明でした。結局、関数は
・前処理
・自動生成
・後処理
というかたちになっていて、前処理と後処理は関数名はきまっていますが、中身は自由に書くことが出来ます。なので、問題は自動生成の関数makefileってことでした。
 今回はそのmakefileを説明します。




■位置づけ

makefileは、押されたとき呼び出されるshiyoToFile()から

   Call makefile(hina_name, sh_name, out_name)

 の形で呼び出されます
hina_name:雛形ファイルのあるパス
sh_name ;仕様書のシート名
out_name :書き出し先
です。

 ここで、指定された雛形ファイルを読み込み、仕様書を元に、書き出し先にファイルをかきだします。




■ソース

こんなかんじ
'//=========================//
'//  出力ファイル作成     //
'//=========================//
Sub makefile(infname As String, shname As String, outfname As String)

            '//=========================//
            '//     雛形を読み込む      //
            '//=========================//
    Open infname For Binary Access Read As #1
    fsize = FileLen(infname)
    Seek #1, 1
    indata = Input(fsize, #1)
    Close #1

            '//=========================//
            '//     書き出し内容作成    //
            '//=========================//
    str_pos = 1         '   開始ポイント
    outdata = ""
    tag_pos = InStr(str_pos, indata, "$#$")
    no_out_flg = 0      '   IF文初期化
    
    Do While (tag_pos > 0)
                        '直前まで書き出し
        If (no_out_flg = 0) Then
            outdata = outdata & Mid(indata, str_pos, tag_pos - str_pos)
        End If
                        '制御内容終わりを探す
        end_pos = InStr(tag_pos + 3, indata, "$#$")
        If (end_pos = 0) Then
            str_pos = tag_pos + 3
            Exit Do
        End If
        
                        '制御内容コピー
        tag_data = Mid(indata, tag_pos, end_pos - tag_pos + 3)
        
                        '  制御内容ごとに処理
        str_pos = chgTagToStr(Replace(tag_data, "$#$", ""), end_pos + 3, shname)
        
        
            '   次のタグ位置を探す
        tag_pos = InStr(str_pos, indata, "$#$")
    Loop
            
            '   最後の残りを書き出し
    If (no_out_flg = 0) Then
        outdata = outdata & Mid(indata, str_pos)
    End If
            
            '//=========================//
            '//     作成データ書き出し  //
            '//=========================//
    If (Dir(outfname) <> "") Then
        Kill outfname       '   ファイルがあったら、削除しておく
    End If
    
    Open outfname For Binary Access Write As #1
    fsize = FileLen(outfname)
    Put #1, 1, outdata
    Close #1

End Sub

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




■説明

・初めに雛形ファイルの内容を全部読み込みます
 →コメント「雛形を読み込む」のところ。indataに全部のデータが入る

・はじめに(開始)タグ$#$があるところを探します。
 →tag_posにいれます。

・開始タグがみつからなくなるまで、以下の処理を繰り返します
   ・前の終了タグの後(はじめはファイル先頭)から、
    開始タグまでを書き出します。
   ・終了タグ$#$を見つけます
   ・そのタグの間の処理をchgTagToStrに行わせます
    →必要な書き出しも、このchgTagToStr内で行います。
   ・次のタグ開始位置を見つけます。

・最後に残りの終了タグ(タグが見つからない場合、ファイル先頭から)
 から、ファイルの終わりまでを書き出します。

・ファイルを書きだしまず
 →コメント「作成データ書き出し」のところ。outdataの内容を書き出し




■つまり、

・タグをみつけて、そこまでを書き出し、

・見つけたタグについてはchgTagToStrで解析、必要な内容を仕様書から
 もってきて書き出し

・次のタグを探す

という繰り返しをしているだけです。




なので、書き出しの一番の問題は、関数「chgTagToStr」内でタグをどのように処理しているのかですが、これについては、次回ということにします。


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

開発の初めから順番に書いていってみる その49:プログラミング(11)自動生成決定表2。

2007-05-25 11:57:55 | Weblog

 シリーズ「開発の初めから順番に書いていってみる」の続きです。
 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 現在プログラミングです。
(プログラミング以前は、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm

 プログラミングでは決定表と自動生成のお話をします。
 現在、決定表の自動生成をやっています。



■仕様の復習

で、決定表は、こんなかんじ

で、前回、出力サンプルを示し、以下の項目が必要ということになりました。

(1)項目名がはいるところ=可変項目
(2)zyoken_list=YNの条件の繰り返し、可変項目
(3)todo_list=下の処理内容の繰り返し、可変項目
(4)条件に使う変数名と型=(未定義)繰り返し、可変項目
(5)条件式=条件式の繰り返し、可変項目
(6)実行内容=実行内容と番号の繰り返し、可変項目


このうち、4,5,6の情報はなく、2,3は回転させるということでした。
(1はあります)

で、今日は、仕様書についてです。




■ない情報に関しては、いれてもらわないといけない

 ここで、(4)、(5)、(6)は、がんばれば生成できるのかもしれないけど、ここにはない情報なので、これは、入力してもらうことになります。

したがって、結局、記入してもらう仕様書はこんな感じです
(黄色の部分が入力部分)





■情報加工は前処理で

で、情報加工に関しては、前処理で行います。
90度回転させるわけですが、実際には、前処理を終わった段階で、
あらたに、こんなシートを作成することになります。



新たにシートを作成した場合、このシートを処理しないといけないので
作業一覧は書き換える(このシートを処理するようにする)必要があります。




■まとめ

このように、

・サンプルから、入力項目を決め
・ない項目に関しては仕様書に追加
・情報がある場合は前処理で加工
  →新しいシートを作るのもOK
     :その場合は作業一覧を書き換えることになる。

というかたちになります。




次回は、このシートから、自動生成を行う、雛形ファイルに関してです。




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

大手アップローダーサイトが、続々閉鎖らしい

2007-05-25 00:56:18 | Weblog

ここの痛いニュース
画像ちゃんねるに続き「VIPろだ」「がむしゃら」「カサマツさん」など大手アップローダーサイトが閉鎖
http://blog.livedoor.jp/dqnplus/archives/978753.html

によると、大手アップローダーサイトが、続々閉鎖らしい

で、次は、どうなる。。。

そして、最終的には、だれが、どうなるんだ。。。

まだまだ波乱があるのか。。。も?


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

ブロガーに対する実名登録義務付け計画、撤回へ-中国

2007-05-24 21:23:53 | Weblog

ここのニュース
ブロガーに対する実名登録義務付け計画、撤回へ
http://www.afpbb.com/article/environment-science-it/it/2228783/1621700

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


国営新華社通信(Xinhua)が22日伝えたところによると、政府当局はインターネット業界やユーザーからの激しい抗議を受け、ブロガーに実名登録を義務付ける計画を撤回する予定だという。

 インターネットという新たなメディアの急速な成長をめぐって中国政府高官の間で懸念が広がる中、胡錦濤(Hu Jintao)国家主席はインターネットの「浄化」運動を展開している。同運動の一環として作成された実名登録計画は、匿名でサイバー空間に潜むブロガーたちが社会に「悪影響」を及ぼすのを防ぐことを狙ったもので、2006年後半に内容が公表された。

 政府が管理する企業団体の中国インターネット協会(Internet Society of China、ISC)は今週、新たな計画案を発表した。同案では、実名登録は「義務」ではなく「推奨」されるに留まっている。


だそうな。。
実名はむりっしょ。。っていうか、個人情報保護の立場からすると、実名じゃないほうが。。。
って、そーいう問題じゃないんだね、きっと、中国政府は。。


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

HTMLの表を、Excelに取り込んでグラフにしたい

2007-05-24 18:52:01 | Officeソフト&VBA

という話を今日、説明してきた。

ウィリアムのいたずらは、こうやっている

1.HTMLをExcelで開きます
 ExcelでHTMLファイルを「開く」で開けます。
 そうすると、ExcelシートにHTMLファイルが読み込めます。
 表枠のところは、セルにちゃんと入って読み込めます。

 なお、Excel2003では、ファイルだけでなく、
 開くのところに、

 http://table.yahoo.co.jp/t?s=7860.t&g=d

 のようにURLを入れてもちゃんと開きます。

2.新しい空白のExcelブックを「新規作成」します

3.1で開いたHTMLの必要な表枠部分を、
  2の新しいExcelブックにはり込みます。

  ちゃんと、表がシートのセルに入ります。

4.あとは、普通のグラフの指定と同じです。

こんなかんじです。。

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