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

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

自動車の前方/後方をカメラで取り、画像処理して、車を自動制御っていうのは、アリだよなあ。。

2007-12-10 17:54:08 | Weblog

ここのニュース
イギリス軍から新登場!君は「透明戦車」を知っているか!?
http://headlines.yahoo.co.jp/hl?a=20071206-00000022-rec_r-sci

一見すると、ただのおバカなニュース

カメラで撮った画像を、車体に投影して、透明戦車(^^;)

しかーっし!!
この前提となる技術を考えると、ひとつもばかげた話ではないのであーる!!

これを実現するためには、

1.あらかじめ、カメラで前方を画面で撮影する。
2.その中から、動くものを排除する
3.それを画像処理して
4.出力する

これを、移動中にやっているわけだ・・


ってことは、カメラで前方をとって、さらに自動車がどう動くかを予測して、処理している技術を持っているということだ。実際、たしか、NHKで昔見た気がするんだけど、アメリカで、無人で車を走行させるコンテストみたいのがあって、そこで優勝したチームは、前方をカメラで取り、画像処理して、障害物がないことを確認して、自動運転していた。

 っていうことは、この技術をもっているということは、イギリスは、画像処理して、自動運転する技術も、持っているんじゃないか?

 で、さらに面白い話なのは、透明戦士だ。透明にしてしまえば、その戦士が、人間なのか、ロボットなのか、わからない。動きから判断するしかない。こーなってくると、ロボットが戦争したり、無人戦車が戦争したりというのも、まんざらSFチックな話ではなくなるかもしれない。

 いや、軍事だけではなく、車の事故防止のため、カメラ(普通の可視光線が移るカメラだけでなく、赤外線による感知とかも含めて)を付けて画像処理したり、バックミラーを今は、アナログな鏡だけど、カメラで後方を写すとかも、ありえるんじゃーないか??

 ・・・ひょっとして、思っているより、すごい戦車で、その内容をカモフラージュするため、「透明戦車」などという、おばかな話にしているのかも?




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

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

2007-12-10 14:13:03 | 開発ネタ

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

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




■雛形ソースの概要

 雛形ソースも、サンプル同様、編集型と検索型の2種類あります。
 で、これらどちらも、サンプルでは、引数に関しては、ビューから受け取ったもの全部をモデルに渡し、モデルから受け取ったもの全部を、ビューに返して(XMLに書き出して)います。なので、仕様書の引数のところは関係ないものとします。

 そうすると、編集型と検索型のどちらも、変更箇所は、以下のとおり

・public class $#$CELL D3$#$ extends HttpServletと、クラス名を変更
・「主処理:処理を実行する」ところ
		$#$CELL D5$#$	obj = new $#$CELL D5$#$();
		int kekka = obj.$#$CELL H5$#$(map);

と変更(検索型の場合、intではなく、返り値はVector)




■雛形ソース(編集型)

 そーすると雛形ソースの編集型(返り値は、エラーコードまたは正常終了のときの0のみでいいもの)は、以下のようになります。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class $#$CELL D3$#$ 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));
			}
		}

		//==============================//
		// 主処理:処理を実行する	    //
		//==============================//
		$#$CELL D5$#$	obj = new $#$CELL D5$#$();
		int kekka = obj.$#$CELL H5$#$(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>");

	}
}

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




■雛形ソース(検索型)

 一方、雛形ソースの検索型(返り値は、検索結果複数アイテム)は、以下のようになります。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class $#$CELL D3$#$ 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));
			}
		}

		//==============================//
		//	主処理:処理を実行する //
		//==============================//
		$#$CELL D5$#$	obj = new $#$CELL D5$#$();
		Vector kekka = obj.$#$CELL H5$#$(map);

		//==============================//
		//   後処理:結果をセットする   //
		//==============================//
		
		//	(1)セッションセット
		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'>");
		if ( kekka	==	null )
		{
			out.println("<retcode>-1</retcode)");
		}
		else
		{
			out.println("<retcode>0</retcode)");
			for(int i = 0 ; i < kekka.size() ; i ++ )
			{
				HashMap rec = (HashMap)kekka.elementAt(i);
				out.println("<item>");
				String[] key = (String[])rec.keySet().toArray(new String[0]);
				for(int j = 0 ; j < key.length ; j ++ )
				{
					out.println("<"+ key[i] + ">");
					out.println(rec.get(key[i]).toString());
					out.println("</"+ key[i] + ">");
				}
				out.println("</item>");
			}
		}
		
		out.println("</kekka>");

	}
}


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



 今回、テストしてないので、何か間違ったところがあったらごめんなさい。

 あと、ここで示したような自動変換のExcelファイルを使えば、仕様書から上記雛形をもとに、サーブレットをじゃんじゃん?作成してくれる「はず」です。

 ということで、コントローラー(サーブレット)の部分の雛形は終わりです。
 次回からは、画面(View)の話です。



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

IP枯渇問題って、IPV4を高く売りつけ&IPV6へ下取りキャッシュバックすればいいんじゃない?

2007-12-10 10:38:49 | Weblog

スラッシュドットの
JPNIC 「IPv4アドレス在庫枯渇問題に関する検討報告書」を公開
http://slashdot.jp/it/07/12/08/1124228.shtml

のはなし。

そりゃー、枯渇してるのに、値段が変わらなければ、どんどん枯渇するよねえ・・・
この問題って、たんに・・

(1)国とか、えらいところが、
    ・IPV4のアドレスをとるには、1アドレスあたり、15万円はらえ
    ・しかし、IPV4からIPV6に移ったら、10万円もらえる。
    ・IPV6の値段は、すきにしていい

(2)プロバイダは、下取りしたIPV4アドレス
   +自分たちが持ってるアドレスを使って、
   現状IPV4を利用している客に対して動的なNAPT-PTを利用する
   ことによって、IPV6への変換を実現する
   (ので、IPV6、IPV4をプロバイダレベルで相互運用する)

(3)(2)の費用は、(1)のマージン+国家が補助金を出す

ってすると、貧しい会社で、いくつか、IPを持っている会社は、別に通信できなくなるわけではないから1個ぐらい売っても・・っていって、出てくることももちろん考えられるけど、それ以上に、貧しい国の場合です!!

 「うちの国家はIPV6に変えて、IPV4を日本に売りつけて、儲けるニダ。別に国民が海外との通信が不便だろうと何だろうと、かまわないニダ。」とかいいだす、将軍様・・・じゃなかった、国家があるかもしれない。
 先進途上国などが、一挙にIPを売り出したら+貧しい人は15万でIPV4とるより、IPV6のほうでもいいやとなるだろうから、結構、IPV6も広まって、ある臨界点まで超えたら、IPV6に移行するようになるような気がするんだけどなあ・・・

 ・・・なんか甘い??

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