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

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

初音ミクのVOCALOID、第二段は、女の子だけでなく、男の子もいるらしい

2007-12-03 21:47:09 | Weblog

ここの記事
男の子もいます!「鏡音リン・レン」 コンテンツ投稿サイトもオープン
http://www.itmedia.co.jp/news/articles/0712/03/news043.html


によると、初音ミクのVOCALOID、第二段は、女の子の「鏡音リン」だけでなく、男の子の「鏡音レン」というのもいるらしい

ほー。。。
苗字と年齢がおなじだけど。。

1.双子
2.1年にがんばって2人生んだ?
3.親戚の子
4.赤の他人でたまたま苗字が同じ

さあ、どれ?


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

IFrameも、同一のサイトからでないと、window.parentすると、エラーになるの。。。

2007-12-03 18:54:15 | JavaとWeb

以下のようなiframeを含むHTMLを書きます
<html>
<head></head>
<body>
<iframe SRC="http://127.0.0.1/test2.htm"></iframe>
<script type="text/javascript" language="Javascript">
function setmsg()
{
	alert("test");
}
</script>
</body>
</html>

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

つまり、iframeで、http://127.0.0.1/test2.htm(ローカルのtest2.htm)を呼び出し、
あとは、setmsg()っていうテストプログラムを書いているだけ。

一方、呼び出されるtest2では、
<html>
<head></head>
<body>
<A HREF='#' onClick='window.parent.setmsg();return false;'>aaaa</A>
</body>
<html>

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

と、ただ、親(ここでは、上記ファイル)のsetmsg()をクリックされたら呼び出す
というHTMLを書きます。

このとき、ブラウザでhttp://127.0.0.1/test.htmとして、上記の一番初めのファイルを呼び出すと、中にtest2.htmがあって、そこをクリックすると、setmsgが動いて、ダイアログが出ますが、
 ファイルをダブルクリックしてやると、中にtest2.htmがあるけど、そこをクリックしても、エラーになるだけで、ダイアログが出ない(>_<!)

同様に、test2が外部サイトにあってもだめみたいだ。。。
同一サイトなら大丈夫ってことかな。

異なる外部サイトから、iframeの親を操作することはできないのかなあ・・

P.S できちゃったら、外部サイトから操作できちゃうことになるんで、やばいんだけどね(^^;)



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

オブジェクト指向で開発の最初から最後までの手順例-その38:雛形(11)

2007-12-03 14:57:39 | 開発ネタ

 オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」

 現在、「いままでのまとめ」にある、「(4)フレームワークにもとづき、クラスなどの開発手順、雛形の確定」をやっています。
 で、作らなきゃいけない雛形などのうち、現在、「コントローラー」についてやっていて、前回は概説だったので、今回は、サンプルソースのうちの1つについてです。




■サンプルソースの概要

 コントローラーは、うまく行ったかどうかを返す編集型のものと、検索結果を返す検索型の2種類がありえます。前者は結果のコードを返すだけ、後者は、何らかの値の集合(レコードなど)を返します。

 今回は、結果のコードを返すだけの編集型についてです。

 編集型においては、処理はこんなふうになります。

・前処理
   セッションの値をハッシュマップ(モデルの引数)にいれる
   画面からの値をハッシュマップ(モデルの引数)にいれる

・主処理
   モデルを生成して、実行(引数はハッシュマップで)

・後処理
   セッションに値を入れる(入れるように指定されたもののみ)
   値を返す

ここで、今回は、セッションへの値指定は、引数に渡すハッシュマップのキーが*sessionではじまるものときめます。




■サンプルソース

で、こんな感じのサンプルソースになります
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class addShohi extends HttpServlet {

	/*
	 * サーブレットが入ってくるところ<BR>
	 */
	public void service(HttpServletRequest request, 
                      HttpServletResponse response) 
                          throws ServletException, IOException {

		//============================================//
		//前処理:データをハッシュマップに全部入れる	//
		//============================================//
		HashMap	map	=	new HashMap();

		//セッション開始
	 	HttpSession session = request.getSession(true);

		//	セッションのデータを全部ハッシュマップに移す
		Enumeration namelist = session.getAttributeNames();
		if ( namelist	!=	null )
		{
			while(namelist.hasMoreElements() == true )
			{
				String key = (String)namelist.nextElement();
				key	=	new String(key);
				map.put(key,session.getAttribute(key));
			}
		}
		
		//  画面からのrequestデータを全部ハッシュマップに入れる
		request.setCharacterEncoding("utf-8");
		Enumeration namelist2 = request.getParameterNames();
		if ( namelist2	!=	null )
		{
			while(namelist2.hasMoreElements() == true )
			{
				String key = (String)namelist2.nextElement();
				key	=	new String(key);
				map.put(key,request.getParameter(key));
			}
		}

		//==============================//
		// 主処理:処理を実行する	    //
		//==============================//
		Shohizei	obj = new Shohizei();
		int kekka = obj.insert(map);

		//==============================//
		// 後処理:結果をセットする	    //
		//==============================//
		
		//	(1)セッションセット
		if ( kekka	==	0 )
		{
			String[] mapKeyList = (String [])map.keySet().toArray();
			for(int i = 0 ; i < mapKeyList.length ; i ++ )
			{
				if ( mapKeyList[i].indexOf("*session")	>=	0 )
				{
					session.setAttribute(mapKeyList[i],map.get(mapKeyList[i]));
				}
			}
		}
		
		//	(2)結果をXMLで返す

	    // (2)-1 ContentTypeを設定
	         response.setContentType("text/xml; charset=utf-8");
		response.addHeader("Cache-Control", "no-cache");
                  response.addHeader("Pragma", "no-cache");

	    // (2)-2 出力用PrintWriterを取得
    	         PrintWriter out = response.getWriter();

	    // (2)-3 出力
		out.println("<?xml version='1.0' encoding='UTF-8' ?>"); 
		out.println("<kekka xml:lang='ja'>");
		out.println("<retcode>"+kekka + "</retcode)");
		out.println("</kekka>");

	}
}


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

主処理のところは、呼ぶ出したいものによって入れ替わります。
今回は消費税テーブルへの追加です。

テストしてないので、まちがったところがあったらごめんなさいm(__)m




次回は、検索型の場合のサンプルコードです。




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

アスペクト指向が、なぜ必要になるかについての論拠について考えてみる

2007-12-03 11:30:07 | Weblog

 アスペクト指向は、プログラムの中に、共通の事柄(これが横断的関心事)があるので、それをSOC(関心事の分離)によってわけるとされる。
 そこまではいいんだけど、

1.それって、何で設計のときに分離できないんだ?
2.分離したとしたら、それを呼び出せばいいだけで、
  アスペクト指向は、どこが便利になるんだ?
3.横断的な関心事というのは設計時点で、共通モジュールとして分離している
  はずで、それと、アスペクト指向のSOCとの境目はどこにあるんだ?

っていう疑問が・・・生じませんか?

 それについて、独断と偏見と妄想で、考えてみる。




■実装上の共通関心事は、開発者でないと分離できない

 実装上の仕様は、たとえば、こういう値を入れたら、こうなるというような、事前条件と事後条件(事前条件と事後条件の関係)で記述されるのが、普通である。

 つまり、「帳票に、今月の売り上げの合計値を出す」のような感じ。

 わざわざ、「ここでロギングを出して、ここでDBオープン、ここでselectを発行したら、Rowをフェッチしてきてね」とかは、普通書かない(いや、書いてもいいし、書くケースもないとは・・・いえないけど、”要求仕様段階では”普通書かない)

 つまり、機能仕様に関して、事前条件・事後条件(不変表明もあるか)を規定することで、要求仕様は記述される。

 ということは、実装方法も、実装上の共通関心事も、ここの中では書かれないということになる。

 これは当然。




■実装上の共通関心事

 しかし、実装上、共通なことっていうのは、当然ある。
 外部データ入出力処理なんて、メディアごと(ソケット間通信、DBアクセス、ファイルアクセスなど)に大体同じだ。

 だから、これらの操作は共通関心事ということになる。

 事実フレームワークとして、これらはプロジェクト内で標準化(共通化)して定義する。




■で、テストファーストで行った場合

 しかし、ここで、テストファーストで行った場合、論理的なモデルに応じて、クラスを作り、確認することになる。つまり、モデルだけで、整合性をとってしまうことになる。この段階で、実装が入るわけではない(少なくとも、細かいことが決まっていない)

 このあとで、実装を入れるとすると・・機能仕様ができてモデルを作った後に、プログラムの共通部分(フレームワーク)の部分を入れて修正するという形にならざるを得ない。




■しかし、アスペクト指向で、実装の共通部分を分離できれば・・

 しかし、アスペクト指向で実装の共通部分を分離できれば、機能仕様は仕様だけを追いかけていって、モデルを作成させ、一方、実装部分の標準化するようなところはあとから入れられるとすれば、コンカレントに開発が出来る・・という論理になる。

 また、あとから論理的(機能的な、要求仕様的な)仕様変更が起きても、そこだけを仕様変更しただけで、すぐに(実装上の手を加えないで)プログラムが出来る・・という論理になる。

ここ
第1回 アスペクト指向の基礎とさまざまな実装
http://www.atmarkit.co.jp/farc/rensai/aspect01/aspect01.html

で指摘されている、関心事としても(以下斜体は上記サイトより引用)


・プーリング/キャッシング
・永続化処理
・パフォーマンスの最適化
・プログラミング・ポリシーの強制
・アクセス・コントロール(セキュリティ)
・デザイン・パターンの適用
etc……


は、実装時の共通化部分。

ということで、本当に上記のコトがいえる・・・のかあ?
実際にAspect-Jとかでやってみないとわかんないけど・・・



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