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

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

鉄道関係の着メロや、DVDではなく、ぬれせんべいを売って、経営を救う?銚子電鉄!

2006-11-22 23:41:27 | Weblog

鉄道会社が経営難で、いろんなものを売っている。。。。
っていうと、元手がかかんなそうな、

 切符とか、
 鉄道ファン向けに、電車の着メロとか、
 運転席から見える様子のDVD?

と思ってしまいがち??なんだけど、

銚子電鉄はちょっとちがって、濡れせんべいを売っているらしい。。

ここのニュース
「ぬれ煎餅買って」 経営難の銚子電鉄がSOS
http://www.asahi.com/national/update/1121/TKY200611210303.html

によると。。

 実際に、銚子電鉄のオンラインショップ http://chodenshop.com/をみると、いろんなものが売っているけど。。
 食べ物が多い。。。

 ニュースによると(以下斜体は上記ニュースより引用)ぬれせんべいは

昨年度は本体の鉄道事業の約1億1500万円の1.6倍となる約1億8000万円を売り上げた。


へー、「ぬれせんべい」って、売れてるんだあ。。。
っていうか、そーなると、鉄道事業のほうが、副業になってしまったりして。。
そのうち(^^;)


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

オブジェクト指向の場合、引数はXMLを展開したDomとかHashMapのほうがいいときも。。

2006-11-22 16:45:06 | Weblog

 シリーズ化しつつある依存性の問題の対応策の話。ただし、きょうは番外編。

 このシリーズで問題にしているのは、
・依存性がある状況において
・修正したとき、
・依存性があるのに、連絡ミスで、その修正の対応してもらわなかった場合、
・問題が起こる
という話です。

 これを回避するために、今まで書いた方法は、以下の2つです。
   メソッドも一本化(共通)、引数も共通
   メソッドも引数も共通化しない(その代わり、前のメソッドを推奨しないにする)

 で、論理的に考えると、あと2つの可能性
   メソッドはかえるが、引数は共通
   メソッドは一本化、引数は、かえる

 というのが、考えられます。

 このとき、「メソッドは一本化、引数は、かえる」っていうのは、あんまり無いと思います(ただし、Javaの場合は、できるんですけど。。つまり、メソッドexecuteで、引数をobjectにしておき、引数の型に応じて、起動するメソッドを変えるという形です。
 これは、引数で状態を表現し、その状態に応じて、処理メソッドをかえるという、stateパターンの応用なのですが、うーん、つかわんぞ(^^;))

 一方、「メソッドはかえるが、引数は共通」これは、よくあります。
 カオル姫方式として、このブログで使っているのも、共通の引数にしてしまい、
 各画面メソッドをよび、その画面で必要なモノだけ、その共通変数から拾ってもらうという形です。

 また、サーブレットでも、画面からの呼び出しは、どの画面にかかわらず、おなじ引数です(引数を展開して、わたしてはいません)
 そもそも、CGIの場合の引数は、構文規則は決まっているものの、引数をずらずら文字列にして渡します(数字のところをわざわざIntegerにしてバイナリ表現で送ったりはしません)

 また、XMLを引数として、やり取りするというのもあります。

 ちなみに、富士通のInterstageのCBM,CBSも、CBM,CBSの引数であるCBMMsg,CBSMsgの型は、基本的に同じになっていると思います(CAANMsg型のような気がした。。)




 どうして、このように、メソッドは変えるのに、引数は共通化する(実際には、引数を封筒(エンベロープ)にいれる形で、型をあわせる)のか?それにメリットはあるのか?
 ということですが、それについては、実際、この方式の説明のときにすることとして、

 この方法は、よく、次の2通りのケースで使われます

・引数が頻繁に変わるもの(仕様が不確定のケース)
・引数が決められないため、汎用的にしたい(CGIの文字列、サーブレットの引数など)

 で、UMLで開発する場合、この方法が有利な場合があります。開発の手順上、
 それについて書いてみます。




 UMLで開発する場合、アクティビティ図から、ユースケース図におとして、さらにクラスへと展開していきます。

 しかし、クラスわけする前に、だいたい全体像がみえるため、この段階で、サブシステムにわけてしまいます。この時点では、実は、入出力がはっきりとは、項目レベルではきまらないのに、エラーいひとが、わけてしまいます。

 そうすると、そのまま、クラス作成に突入します。そうすると、ここで、詳細に落としていく段階で、「あ、この引数が足りない!」と気付くことになります。
 実際に、引数の問題が出るのは、プログラミングから、単体テスト、場合によっては、結合テストのインタフェース確認(IT1)でおきることも、よくあります。

 ところが、PTやIT1の段階で、いっきに噴出すと、引数が日ごとに代わってしまい、結合テストをしようとしてるのに結合できないから進まない。。ということになってしまいます。




 なんで、引数をいったんエンベロープに入れてしまえば、あとから引数変更があっても、型チェックはこのエンベロープに対して行われるだけなので、問題ありません。

 ただ、その引数を利用している人には、引数が変わったよ!っていうことを知らせたいかもしれません。

 その場合には、Strutsのような、引数のキャストを使うことによって実現できるのですが、それについては、実際、この方式の説明のときにすることにします。




 で、一方、メソッドなのですが、大まかなメソッドというのは、ユースケースなどで大体決まってしまうため、引数ほどには変更が無い場合がおおいです。

 たとえば、画面は、プログラミング以前に、どんな画面をだすかの画面名と遷移くらいはきまります(画面項目は、プログラミングにはいってから代わることもよくあります)

 なので、メソッドは先に決めて、引数だけ、あとで、変更があっても柔軟にできるようにエンベロープにいれるというのは、UMLっぽい開発では、意味があるといえます。




 そういう風に考えると、オブジェクト指向の場合、引数はXMLを展開したDomとかHashMap、すなわち、エンベロープとしてそれらを使い、実際の引数はその中に入れたほうががいいときもあると、いえそうです。
(あくまでも、独断と偏見ですが。。。)



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

Javaの画面表示-その20:JSPで、表示部分と処理部分を分ける(その2:ソース)

2006-11-22 14:19:55 | JavaとWeb

 シリーズJavaの画面表示のつづきです。今、JSPやってます。
 前回、JSPで、ツールとか特別なフレームワークとかを使わないで、画面部分と、処理部分を分けてみるということをやってます。
 前回は、どうしてそんなことをやるかというのと、その仕様についてやりました。

 簡単に言うと、
1.初期画面がでます。
2.何も入力しないと、初期画面の上にエラーがでます。
3.入力するとチェックして、その結果を出します。
 っていうのをやります。

このとき、
・画面部分
  1.入力画面(と、エラー画面)
  2.結果表示画面   

・処理部分
  3.処理部分
という、合計3つのファイルにしたいわけです。
っていうことまでやりました。

今回は、この画面と処理を分ける場合の基本的な考え方と、
そのソースについてです。




■画面と処理を分ける場合の基本的な考え方

 画面と処理を分ける場合、

 画面のほうには、値を入れる部分が基本的にきます。
 (それ以外のことは、極力書きません)
 なので、
1.<%=変数%>という形で値をかく部分と、
2.値を書くために繰り返しの処理をする
 という以外、できるだけ書きたくないです。

 一方処理のほうは、値を受け取って、処理をしたら、画面に値をわたさないといけません。
 この場合、画面は、いろいろと変わることが考えられます。
 なので、依存性をできるだけなくしたいです。

 そうすると、どーするかというと、ここで、カオル姫方式を使い、

・セッションに値をいれて、処理と画面の間の変数を渡します
・処理が終わったら、フォワードによって、画面を表示します

とすると、処理と画面でやることは、以下のようになります。

処理の手順
0.(前提、準備)セッションをtrueに

1.値を受け取る
    セッションの値
    フォームの値(画面から直接入力の場合)

2.やりたい処理をする

3.結果を、セッションに詰めて

4.画面表示へフォワードする

→3と4は、いろいろ分岐したりして、何個もでてくることがあります。

画面の手順
0.(前提、準備)セッションをtrueに
1.セッションから表示する値を取得する
2.<%=変数%>という形で値をかいたり、
3.値を書くために繰り返しの処理をする

→2と3は、いろいろでてきます。

ということになります。




■ソース

今回のソースは、以下の構成になります
・画面部分(上記「画面の手順」を行う)
  1.入力画面(と、エラー画面)index.jsp
  2.結果表示画面kekka.jsp   

・処理部分(上記「処理の手順」を行う)
  3.処理部分shori.jsp

これらのファイルを、Tomcatのフォルダの下の、アプリのあるフォルダ(webapps)の下の
test/jspフォルダにいれることにします。

 なので、アクセスは、
http://127.0.0.1:8080/test/jsp/index.jsp
をブラウザで開いて、そこから入力することになります。

では、以下、ソースです。

●入力画面(と、エラー画面)index.jspのソース
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<%@ page session="true" %>
<%
//**********************************************//
//	画面用の部分			  //
//**********************************************//

//	セッションを変数に入れる
	String msg = (String)session.getAttribute("msg");
	if ( msg	==	null )
	{
		msg	=	"";
	}


//**********************************************//
//	以下、画面表示			  //
//**********************************************//
%>
<title>早打ちの練習</title>
</head>
<body>
<h1><font color=red><%=msg%></font></h1>
<H1>早うちの練習</H1>
以下の文を打とう!<BR>
<B>これは、練習文です。</B><BR>
<form method=get action="http://127.0.0.1:8080/test/jsp/shori.jsp">
<input type=text name=nyuryoku size=20><P>
<input type=submit name=do value=打ち終わった!><P>
</form>
</html>

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

●処理部分shori.jspのソース
<html>
<head>
</head>
<body>
<%@ page session="true" %>
<%
		//==============================//
		//	データの取得	     //
		//==============================//

		//Fromの引数取得
	String nyuryoku = request.getParameter("nyuryoku");
	if ( nyuryoku	==	null )
	{
		session.setAttribute("msg","なにも入力されてません");
		application.getRequestDispatcher("/jsp/index.jsp").forward(request,response);
	}
	else if ( nyuryoku.length()	==	0 )
	{
		session.setAttribute("msg","なにも入力されてません");
		application.getRequestDispatcher("/jsp/index.jsp").forward(request,response);
	}

		// 処理
	int	i,atari;
	atari = 0;
	String chk = "これは、練習文です。";
	for(i = 0 ; i < nyuryoku.length() ; i ++ )
	{
		if ( i >= chk.length() )
		{
			break;
		}
		else if ( chk.charAt(i) ==  nyuryoku.charAt(i) )
		{
			atari++;
		}	
	}
		//==============================//
		//	ビューにフォワード     //
		//==============================//
		//	結果の設定
	session.setAttribute("msg","");
	session.setAttribute("ritu",Integer.toString(atari*100/chk.length()));
		//	フォワード
	application.getRequestDispatcher("/jsp/kekka.jsp").forward(request,response);
%>
</html>

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


●結果表示画面kekka.jspのソース
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<%@ page session="true" %>
<%
//==============================================//
//	画面用の部分			   //
//==============================================//

//	セッションを変数に入れる
	String ritu = (String)session.getAttribute("ritu");


//==============================================//
//	以下、画面表示			   //
//==============================================//
%>
<title>早打ちの練習</title>
</head>
<body>
<H1>結果</H1>
正解率 = <%=ritu%><BR>
</html>

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

今回は、ここまで。

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

リコーが出した、PCの内容を表示し、直接ペンで書き込むやつ、広告やチラシの校正にいいかも?

2006-11-22 12:30:39 | Weblog

きのうのトレンドたまごで、
インタラクティブステーション(仮称)
http://www.tv-tokyo.co.jp/wbs/2006/11/21/toretama/tt.html

という、リコーがだしているものを紹介してました。

これは、
・ExcelやWordなどのPC上のデータを表示して
・表示内容に、直接マーカーで書き込むことができる
・そして書き込んだ内容を撮影データ化して保存できる
というものなのですが、これって、チラシの校正とか、ポスター、ペラ物の校正にいいかも




 といっても、色校とかは無理かな(色を合わせるのは難しそう)とおもうけど、
 チラシや広告なんかだと、デザインの確認としての校正もある。

 これは、お客さんにもしてもらうケースも多いと思うけど、
 (さすがに、ここまで印刷会社の責了には、なんないでしょう ^^;)
 このとき、複数箇所や複数人で行う場合がある。
 →スーパーなんかだと、本部と、店舗、本部でもエラーい人とチラシ担当など。。

 こういうケースでは、たぶん現在、
 ・PDFで、校正用に出力したものをつくって、各地に送信
       それにコメントしてもらったり(メモを使えば書ける)
 ・紙で、校正用に出力して、それに記入してもらうということになる。

 しかし、このやり方では、パソコンを複数人でみて(みることはできるけど)、
そこ(1つのPDF)に複数人で記入してもらうことはちとたいへん。

 で、これが、複数箇所からくると、いちいち全部の(コメントを書いた)PDFを開いて(紙の場合は、紙をあつめて)、
それをもとに修正しないといけない。
 ずーとまじめに修正してきたら、最後に来たPDFで、「ぜんぜんだめです。ぜんぶやりなおし!」とか書いてあったら。。。。(>_<!)




 でも、これなら、コメントを記入してもらって、それをJPEGかなんかにして、
 トンボまで出力すれば、

 あとは、そのトンボをあわせれば、複数枚あっても、1枚に重ねることはできるし

 それにこれがPDFに対応してるかどうかわかんないけど、
 対応してなかったらJPEGで出力して、Wordにでも貼りこんで、
 一斉送信すれば、すぐに、みんなで、会議室とかでみれる。

 なので、「ここ、へんだよね」っていうのが、ゆびで指し示せる
 (パソコンで1人1人が開いてる形だと、ここ!っていっても、どこ??ってことになる)




 うーん、まあ、印刷会社とか、ユーザーのスーパーとか、そういう人が、
関心持って、音頭とらないと、できないような気がするけど、
もし、うまくいけば、かなり面白い気がするね。。。

(世界同時広告で、テレビ会議なんかを繋げた場合に。。)


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