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

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

タッチレスで掛ける、携帯電話とか。。

2007-06-04 19:04:54 | Weblog

自分のデスクトップにある、ネタ用に残しておいたショートカットを削除したいので、ここでちょっと披露します。なので、たいした話ではありません。

まずはこれ
タッチレスで掛ける、携帯電話
http://blog.manabiyahonpo.com/archives/category_cat_2/post_417/

たしかに。。。
技術的にはすごいのかもしれないけど、欲しくはない。

つぎ
LEDで、氷の魅惑的な玉を作る
http://blog.manabiyahonpo.com/archives/category_cat/led_1/


おお、なんかすごいじゃん。




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

開発の初めから順番に書いていってみる その54:プログラミング(16)入出力の自動生成4

2007-06-04 17:29:04 | 開発ネタ

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

 プログラミングでは決定表と自動生成のお話をします。
 今、入出力、とくにDB入出力の自動生成をやっています。




■DB入出力部分の自動生成部分
 で、JDBCを使ったDBアクセス部分は、ここ
  execute
  selectExecute
でした。

 で、実際には、テーブルごとに用意した、
  ・select
  ・update
  ・insert
  ・delete
 メソッドから、SQLを発行し、executeとselectExecuteを呼び出します。




■自動生成のメリット

 で、ここでselectの場合、DBの型にかかわらず、String型で返ります。
 そして、String型で、update,insertの値などを指定していただけば、
 update、insert関数内で、自動生成したプログラムが、型にあわせて
 ’をつけたりして、SQL文に合うようにしてくれます。

 つまり、ユーザーはStringで操作して、DBの型変更は自動生成で行うので、
 プログラマは型変更されたことを意識しないでも、プログラム可能です
 (言葉で表現していたのがintにかわっちゃうと無理ですけど、それでも
  コンパイルjavacは通るので、リンクすることはでき、あとは、個々に
  対応すればいいことになります)

 このような、型変換や項目追加時のメリットのほかに、
 全部のプログラムが、これを利用するため、ここにアクセス方法が
 局所化できます。

 そうすると、ここを直せば、パフォーマンスがあがることになります。
 入出力が分散してしまうと、修正もたいへんです。
(どう直すことでパフォーマンスがあがるのかは、別の機会に書きます)




■selectについて

 では、メソッド
  ・select
  ・update
  ・insert
  ・delete
 を順番に見ていきます。

 まずは、selectについて。

 最終的には
SELECT 項目名,・・・ FROM テーブル名 WHERE 条件式
 というSQLを発行することになります。




■条件式の表現法

 条件式は、ANDとORで基本的には表現できます。
 (括弧は展開してANDとORだけで書くことが可能です)
 そうしたあとで、

 (条件式 AND 条件式 AND・・・条件式)OR
 (条件式 AND 条件式 AND・・・条件式)

 のように、ANDでつながっているところを括弧でくくることも可能です。

 そうしたら、
 括弧でくくられた部分をハッシュマップで表現します。
 条件式は 項目名 = 値の形なので(=とは限りませんが)、
 項目名をキー、値(ないしは比較演算子と値)を値として、ハッシュマップに入れます。
 それらのハッシュマップをベクターにいれます。

 つまり、ハッシュマップはANDを、
 それを入れるベクターはORをあらわします。

 そうすると、条件式は、ベクターで表せます。

 といっても、さっぱりわかんないでしょうが、大丈夫です。あとで、Accessと比較してちゃんと説明します。いまは、条件式はベクターで表せる、これだけ知っておいてください。




■selectの項目名

 これは、項目名をベクターの中に入れるだけで実現できます。




■selectメソッドの表現

 したがって、Selectメソッドは

 Vector Data = TBL_A.select(Vector komoku,HashMap where)

 の形で、項目名(型:Vector)、条件式(型HashMap)を引数にして、表現できます。




■ソース

 そして、このときのselectは、こうなります。

	public	Vector	select(Vector komoku,Vector where)
	{
		//	Select文の初め      		
		StringBuffer sqlbuf = new StringBuffer("SELECT ");

		//	項目名の羅列
      		if ( komoku	==	null )
      		{
      			sqlbuf.append("*");
      		}
	      	else
      		{
	      		for(int i = 0 ; i < komoku.size() ; i ++ )
      			{
	      			if ( i	>	0 )
      				{
      					sqlbuf.append(",");
      				}
				String taisho = (String)komoku.elementAt(i);
				sqlbuf.append(taisho);
      			}
      		}

		//	テーブル名が入る	
      		sqlbuf.append(" FROM TBL_A ");

		//	条件式の作成
		String	wstr = makeWhere(where);
		if ( wstr	!=	null )
		{
	      		sqlbuf.append(" WHERE " + wstr);
		}
		
		return	selectExec(sqlbuf.toString());
	}


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

 ここで、条件式は、makeWhere()というメソッドで作っています
 そのメソッドの中身は次回とします。




■GROUP BYなどの利用

 そして、SELECT文は
SELECT 項目名,・・・ FROM テーブル名 WHERE 条件式 GROUP BY 項目名,・・ HAVING 条件式。。。

というように、まだまだこの先も続くような場合があります。 
そのようなものに対応するため、キーに*zyokenというのがあったら、その値をWHERE句以下では使うというのがあるのですが、その処理もmakeWhere()でやっているので、次回説明します。




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


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

メールでセクハラ、ならトラックバックつきブログを紹介したら?

2007-06-04 14:44:11 | Weblog

ここのニュース
会社宛ての“エロスパム”、対処しないとセクハラに?
http://www.itmedia.co.jp/news/articles/0706/01/news104.html

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

セクハラ相談などを受け付けている東京労働局雇用均等室によると、性的なスパムメールは、男女雇用機会均等法上で事業主が防止を義務づけられている「性的な言動」に当たり、受信を防止せずに放置した場合は「環境型セクハラ」とされる可能性が高いという。


っていうことは、なんですか。。

 ブログに、そーいうトラックバックがつくことは非常によくあることですよねえ。
 そのブログの記事を紹介して、「このブログみてみて」って、メールして、女性社員がひらいたら、トラックバックに・・・っていうときは、セクハラ?

 これの問題は、そのブログを紹介してメールに送ったときには、トラックバックはついてなかったけど、女性社員がみたときには、トラックバックがついていたっていう可能性もないとはいえないので、むずかしい。。

 うーん、会社でみられることのあるここのブログ。。。
 は、もともと、トラックバック受け付けてなかった(^^;)

 本家は、会社でみんなで見る。。ことはないだろうけど、一応受け付けないことにしました。




 いや、この問題もあるんだけど、ブログのトラックバックやコメントには、ほかにも問題ありそうな気がして。。

 アップローダー代わりに、だれかのブログのコメントとか、トラックバックに書き込まれてしまったら、そのブログの人が削除しないと。。。問題になっちゃう?
 それは、こまる。。

 っていうか、幽霊ブログ(もう、新規エントリはないけど、コメントトラックバックは出来る)を、そういうようにつかわれてしまうと。。
 誰も管理しないので。。(>_<!)っていう問題も出てきそうだ。。。




 ま、それはさておき、とりあえず、みなさんに、お仕事の上で、紹介されても問題ないように、コメントとトラックバックは、本家も分家も、とめておきますかにょ。



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

一般的な編集ソフトの作り方 その5:メモリ上への要素展開(属性)

2007-06-04 12:26:28 | 開発ネタ

 ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。

 いま、メモリ上に、要素を展開するには?という話をしています。

 その方法として、連結リストを使う場合、
 共通要素として
public class Item {
	int	id;
	Item	prev = null;
	Item	next = null;
}

のような形で持っていて、各要素、たとえば、ドローイングソフトなら、
四角形を
public class Shikaku extends Item {

	/*
	 *	座標と幅、高さ
	 */
	int	x;
	int	y;
	int	width;
	int	hight;

	/*
	 *	線の色
	 */
	byte	line_r;
	byte	line_g;
	byte	line_b;
	
	/*
	 *	中の色
	 */
	byte	fill_r;
	byte	fill_g;
	byte	fill_b;
}

のように、共通要素を継承して、各要素をつくるということは、第三回に書きました。

今回は、その個別要素のうち、属性の表現方法です。




■属性値とは

 各要素における属性値とは、ドローイングソフトの四角形なら、
  ・位置
  ・大きさ
  ・中の色
  ・線の色

 DTPソフトの文字なら
  ・文字コード
  ・フォント
  ・色
  ・位置
 などなど、要素がもつ値をさします。

 したがって、属性値は各要素によってことなりますし、バージョンによっても異なるときがあります(バージョン1では、文字の色はなかったが、バージョン2から文字に色が付けられるなど)。そして、下位バージョンでは、上位バージョンで、どのような仕様追加(属性追加)が起こるかわからない(上位バージョンは未来のことなので)という特徴?があります。




■単純に値を設定してしまう方法

 このとき、一番簡単なのは、上記の例にあるように、全部、属性値を書き出してしまうことです。この場合、上位バージョンで新たに設定されたような内容は無視します。そのため、下位バージョンで開いて保存すると、上位バージョンでしか設定できない内容は、クリアされてしまいます。

 この方法は、仕様変更が起こりやすいですが、簡単で、後述の方法より処理が早いことが期待されます。




■DOMやHashMapに入れる

 もともとドキュメントがXMLで書かれている場合、項目の属性値もDomの中に入っています。そこで、その項目の属性値が入っているnode(というか、項目自体のNode)をもっておいて、
public class Shikaku extends Item {
 Node itemInfo;
}

としてしまったり、属性値のキーと値をハッシュマップにいれて
public class Shikaku extends Item {
 HashMap zokusei;
}

としてしまう方法があります。

 この方法の場合、上位バージョンで設定された属性も、そのままの形でもち、それを保存するので、なにも操作しなければ、もんだいありません。
 ただし、下位バージョンで、ある要素をコピーして、どこかに貼り、それを保存した場合、上位バージョンにしかない属性もコピーして保存できてしまうと、下位バージョンの見てくれとちがってしまいますし、じゃあ、上位バージョンの属性は落としてしまうと、上の方法と大して変わらないし。。。
 という問題はあります。

 なお、この場合、属性をHashMapにいれてしまうなら、すべての形は、
public class Item {
	int	id;
	int	kind;	//	項目種別
	Item	prev = null;
	Item	next = null;
	HashMap	zokusei; //	属性
}


というように、すべて、同じ形で表現できます
(が、だから個々の要素のクラスがいらないかというと、
 他の件で作ったほうがいい理由もある)



■折衷案

 しかし、HashMapやDomにいれるものは、表示時、毎回、属性値のHashMapやDomをアクセスして探さないといけません。これは面倒です。

 なので、良く使うような属性(位置や色など)は、値でもっていて
  (この値を共通要素にいれるか、各要素のクラスにいれるかは、
   その人の判断)

 あんまり使わないようなものとか、上位バージョンでセットされたような
 わけわかんない値を、HashMapにいれておく

 というようにしたほうが、いいのかもしれません。
 ま、好みですけどね。。




 ということで、属性値の表現方法は終わり。


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