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

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

パッケージソフトは、コストが高いのよ。ダウンロードにしてもコスト0じゃないのよ!!

2006-08-24 13:16:53 | Weblog

ウサギと亀の共通項が見えますか? 「特殊への執着」が日本のソフトを弱くする
http://it.nikkei.co.jp/business/news/index.aspx?n=MMITzv000018082006

について、批判されているようだが、その批判はさておき、いくらなんでも、これは・・・
と思う言葉がある。今回は、そこを問題にしたい。

それは
(以下、斜体は上記IT+PLUSの記事より引用)


ソフトウエア製品の複製は材料費と手間費と流通費がほとんどかかりません。普遍性が高く適用範囲の広いソフトウエアがあれば、膨大な利益を手にすることが可能です。


これが、真っ赤なうそだっていうことは誰でも知ってるだろう。
もし、本当ならLinuxのディストリビューターは、大もうけだ。
なのにLaser5はTurboと合併したし、そのTurboはSRA→ライブドアと転々としたうえ、株価泣かず飛ばず。。この状況を説明できない。




 本当のことを書こうよ!!
 みんな、業界の人には、ばれてるんだからさあ。

 パッケージソフトで、流通が2000円以下で抑えるのは、実は大変なのだ。
 製品をだすとき、正規流通ルート(ソフトバンクやWaveに流すケース)は6掛け程度
 になる。じゃなきゃ、秋葉原は赤字だ。
 つまり、2000*0.6=1200円程度になる。

 CDは1枚50円前後(最近はもっと安くなってるかも。。)
 これは、何万枚って焼くケース。つまり、CDを2枚組みにしたらここで、100円。

 キャラメル箱やプラスチックケース(Pケース)、これ自体は、やすい。
 しかし、セットといって、このキャラメル箱やPケースに入れるのにお金がかかるのだ。
 安くて1個100円(=かなりやすい)

 マニュアルその他紙類。
 これは、大量にすれば、輪転をまわせるので、安くなるが、輪転をまわすには
1万枚以上すらないと普通は無理。枚葉(1枚1枚する方式)印刷機は、結構高い。
 かりに50円に抑えたとしよう。
 このほか、細かい部分がいろいろあり(保管費その他)1個あたり50円として
 直接費だけでも、1個300円もかかってしまう。これは、ものすごーく安いほうなのだ。。

 のこり1個あたり900円しかない。
 900円を1万個売っても、900万円だ。
 このうち、デザイン制作費に100万はかかる。これにはデザイナー費用だけでなく、CDの原版作成費用(1枚6、7万かかる)などの間接費も含めてだ。
 さらに、宣伝広告費、これはイクラでもかけられるけど、まあ、最低ラインで、200万?
(チラシ+営業マンのドサマワリ+展示会出展などなど)

 ということで、900-100-200=600万だ。

 600万円で、開発+サポート+広報+営業ぜんぶやるわけえ??
 600万って、人やとえないよ。
 だって、1人雇うのに、給料+社会保険費+会社側が払う社会保険費+その人の什器そのた電気代+部屋代+。。。ってかかるのよ。なので、300万くらいの給料すら、はらえないのよ。600万では。。。




 つまり、1万本程度では、自分ひとりでサポートから何から何までやらなきゃいけないんだけど、日本のエンジニアに、サポートからキャラメル箱の知識からCD出荷の知識から営業の知識から広報の知識をもって実践し、そのうえ、開発する人なんて、いないのよ(たぶんアメリカにも)
 なので、1万本(以下)で、5千円以上のソフトを売るか、10万本以上売れるソフトを売るか、どっちか。。

 前者の場合は、本数が少なくても成立つ戦略を取るので、国際的な戦略はとれない(とらない)。後者の場合は、会社を興すときに莫大な資金が居る。なので、その資金を提供してくれる人がいないと、国際的に広げることは難しい。

 これが、国際的なソフトウエアが出ない理由。一言で言うと、儲からないから。




 なお、これを、ダウンロードにすれば?と思うかもしれないけど、そんなに思うほど儲からない。というのは、ダウンロードにする場合、大量に売るには、それをダウンロードできるだけのサーバーをおかなきゃいけないわけで、そうすると、やっぱお金がかかる。

 それと、今回は計算からはずしてるけど、逆に固定費から考えると、開発+サポート+広報+営業の人件費はおそろしく高い。とくに、ダウンロードの場合、流通を使わないので、その分、広報や営業にお金がかかる。

 それこそ、乙部綾子さんでも引き抜かない限り、ここにかかる費用は大きいのだ。。

 なんで、ダウンロードにしても、もうからない。




それと、多くのベンチャーが引っかかる

普遍性が高く適用範囲の広いソフトウエアがあれば、膨大な利益を手にすることが可能です。


 そうなりません。むしろ、赤字になるリスクが大きくなります。
 なぜかというと広報・営業費用、サポート費用は準固定費*なので、
 売れれば売れるほど、大きくなっていきます
 ただ、直接費ではないので、製品に比例するわけではありません。
 そこで、

    広報・営業費用、サポート費用上昇率<売上上昇率

 にすれば、儲かりますが、たいていは

   広報・営業費用、サポート費用上昇率>売上上昇率

 となってしまいます。
 これは、市場が飽和してきたり、競合が出てくるため、広告費用が余計に必要になるのと、売上を伸ばそうとすればするほど、クレイマーを引き当てる割合が増大し、クレーマーが増えると、サポート部隊がボロボロになり、サポート調達コストが急激に増えるためです。


 なので、ある程度専門性の高いもので、サポートしなくってもOKな人たちに、次々とソフトとそこで使う”消耗品”を売っていけば、お金は儲かります。こういうビジネス、実はある(東証1部にまで、数社上場してる)。




なお

 その利益の一部をまたソフトウエアのバージョンアップに使うことでますます汎用性と使い勝手がよくなり、ますます市場での人気が高まります。


 バージョンアップは、そのために行うのではないんです。実は。。
 もし、この意見が正しいなら、利益回収後にバージョンアップを行うことになりますが、実際のバージョンアップは、すぐに計画されます。そうしないと、困ることがおきます。これは日本のパッケージソフトの流通制度と、会計処理と結びつきますが、あんまり書くと、やばいので、このへんでやめておきます。


*準固定費 固定費のように、販売個数にかかわらず、値段が上がらないというわけではないが、直接費のように1個ごとにイクラというものでもないもの。ある一定量まであがると、急にこんだけかかるなどというもの。例えば、掃除の費用など(人1人きたら、5分掃除。。っていうのもへん。でも、お客さんがある程度一杯来たら掃除しないと。。)
 これによる原価計算を行う場合は、多桁式をもちいる(日商だと1級でないと、やんないと思う) 


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

協栄ボクシング会長、2ちゃんねる書き込みに被害届

2006-08-23 21:52:48 | Weblog

亀田兄弟で有名な協栄ボクシングの会長が、警察に被害届をだしたそうです。

協栄ボクシング会長、2ちゃんねる書き込みに被害届
http://www.zakzak.co.jp/top/2006_08/t2006082301.html

そのニュースによると
(以下斜体は上記ニュースよりそのまま引用。写真は、もとのニュースにあります。)

プロボクシングの亀田興毅選手らが所属する協栄ボクシングジム(東京都新宿区)の金平桂一郎会長(40)=写真=が、ネット上に事実無根の書き込みをされたとして、警視庁新宿署に名誉棄損で被害届を出したことが、分かった。


 これで、つかまるのかなあ。。。
 つかまったら、ほかにも警察に訴える人がいっぱい出てきそうだけど。。


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

Javaで基本操作(その1):新しいデータをマスタに追加、上書きする(マージ)。

2006-08-23 17:42:44 | JavaとWeb

 以前に書いた基本操作で、内部処理について

1.エディッティング/フォーマッティング
   ・数字の表現(カンマつき、小数点と桁数、0を前に付けるなど)
   ・日付、時間の表現
   ・文字列操作
2.四則演算、計算
3.分類(仕分け)
4.ソート
5.マージ
6.チェッキング
  ある項目をチェックし、該当したら表示=>検索
  ある項目をチェックし、該当しなかったら表示=>エラー出力
  ある項目をチェックし、該当したら一部表示=>選択
  ある項目をチェックし、該当したらレコードを合わせる=>Join


 とかいたので、これについて、JAVAで、どう書くかを書いていきます。
 まずは、4.マージから



■マージとは、その内容と戦略

 マージとは、もとのデータに、新しいデータを上書きするというものです。
 ただし、もとのデータにない場合は追加します。

 これをJavaで実現するには、元のデータと新しいデータをHashMapにいれて、
(キーを、比較する項目にして、値に値全体を入れる)
 下のデータに、新しいデータをputすると、putは
  存在するデータは上書き
  ないデータは追加
 してくれるので、上記の内容を満たします。




■マージ:仕様

 下のデータは、以下のとおりです
19:00   サイエンスZERO
21:00   NHKニュース
24:00   うるぐす
26:30   平野 麻樹子の地学


このとき、
  19:00をバレーボールに置換え
  26:00に高校講座化学を追加
します。
その結果を、時間部分をキーにしてソートし、表示します。




■ソースプログラム
 全体の流れは、こんなかんじ。
import java.util.*;

/*
 *  マージのテスト
 */
public class test {
	/*
	 * 	メイン処理(呼び出し元)
	 */
	public static void main(String[] args) {
		HashMap moto = new HashMap();	// 元のデータ(ここに追加する)
		HashMap henko= new HashMap();	// 変更分データ

		//	下のデータ
		moto.put("19:00","サイエンスZERO");				
		moto.put("21:00","NHKニュース");
		moto.put("24:00","うるぐす");
		moto.put("26:30","平野 麻樹子の地学");

		//	追加・修正データ
		henko.put("19:00","バレーボール");				
		henko.put("26:00","高校講座化学");
	
		//	マージする
		Merge.execute(moto,henko);
		
		//	表示する
		Object[] key = moto.keySet().toArray();
		Arrays.sort(key);	//	ソートして表示
		for(int i = 0 ; i < key.length ; i ++ )
		{
			System.out.println(key[i] + ":" + moto.get(key[i]));
		}					
	}
}

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

まず、moto,henkoのハッシュマップにキーと値をセットします。
今回はどちらもStringでかつキーに重複がないので簡単ですが、
値はStringでなく、Hashtableなどというケースもあります。
重複を許す場合は、Vectorにaddし、そのVectorを値とするような
ケースもあります。

 キーが複数(大分類、中分類、小分類)あるケースについて
は、ソートのとき述べます。


 そして、マージするプログラム(後述)を呼び出し、

 結果をソートして表示します。




 で、肝心のマージは、こんなかんじ。
public class Merge {

	public static HashMap execute(HashMap motoMap,HashMap addMap)
	{
		int	i;
		
		//	引数チェック
		if ( ( motoMap == null ) || ( addMap == null ) )
		{
			return	motoMap;
		}
		
		//	キーを取得し、配列に入れる
		Object[] key = addMap.keySet().toArray();

		//	全部、putする
		for(i = 0 ; i < key.length  ; i ++ )
		{
			motoMap.put(key[i],addMap.get(key[i]));	
		}
		return	motoMap;
	}
}

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

足しこむハッシュマップ(addMap)のキーをaddMap.keySet().toArray()で取得し、それを
もとに、motoMapに、キーと値をいれていきます。

こんなかんじですかね。。





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

YouTube、ビデオ広告を導入

2006-08-23 16:33:10 | Weblog

ここのニュース
YouTube、ビデオ広告を導入――パリス・ヒルトンのアルバム宣伝でスタート
http://www.itmedia.co.jp/news/articles/0608/23/news042.html


まず、パリス・ヒルトンのチャンネルというのは、
ここ
http://www.youtube.com/profile?user=ParisHilton


でこのチャンネル、なんか、他のチャンネルと違い、
カスタマイズしてあるそうだ。

で、そのカスタマイズなどなどをやらせてあげるかわりに、
YouTubeは、お金(広告料)をとるというビジネスモデルらしい
Brand Channelsっていうんだって。。


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

設計とか、プログラミングとかの標準はありますよね。で、テスト標準って??

2006-08-23 12:16:07 | Weblog

 唐突ですが、開発における標準化ってことを考えると、こんなかんじになりますよね(ここで、その内容がいいかどうかは別問題として。。)

分析:EA
設計:設計標準
コーディング:コーディング規約
テスト:??
運用:ITIL(ベストプラクティスの集合体で標準化ではないけど)

 ここで、設計標準はUMLを使った場合とか各社の体系を使った場合など、いろいろなものがある。コーディング規約もそう。




 で、ふと思ったんですが。。

 テスト標準って、あんまり言いませんよねえ。。
 なんで品質向上には テスト標準が重要(リンク先はPDF)なんていう話がでてくるのかもしんないけど。。

 うーん、やっぱ、ないのかな。。。

 ”なんとか標準”とくれば、みなさんおなじみなのは、ITスキル標準(ITSS)ですが、
ITSSをみてもあんなにいっぱい分類あるのに専門分野に、テストエンジニアとか、品質管理スペシャリストとか、ないっすよねえ。。

 テストに標準化という概念はない。。。ひょっとして(^^;)



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

デザインパターンの23種類の各パターンは、要するにこうだ!と言い切る(その1:生成関連編)

2006-08-23 02:22:15 | JavaとWeb

 基本的な処理っていう話を昨日のブログでかきましたけど、基本的な処理っていうと、GoF本のデザインパターンじゃないの?っていう人もいると思います。

 ここで言っている基本的な処理っていうのは、業務における基本的な処理であって、GoF本がいっているパターンは、業務でなく、それをプログラミングに落としてくるときの、基本的な方略のTIP集みたいなもんたとおもうんです。
 つまり、ここで言っている業務の基本的な処理っていうのは、もっと、ユーザー、業務よりで、GOF本のデザインパターンなんかで言う基本は、それをうけて、じゃあ、プログラミングするための設計をするとき、どーしましょーかねーっていうときの、もっとプログラムよりの話だと思うんです。




 とかなんとかいっても、よくわかんないですよね。たぶんGoF本のデザインパターン、23種類をぜーんぶ説明しちゃえば、違いがわかると思うのですが。。。GoF本をそこまで読み込んでいない。
 とはいえ、きょうはちいと時間があったので、

 Java言語で学ぶデザインパターン入門

 という本をよみなおして、デザインパターンについて、ちいとばかし説明してみたいと思います。とはいえ、そんなに時間はないので、今日は、生成についてのSingleton,Prototype,FactoryMethod,Builder,AbstructFactoryについて。

 っていうことで、にわかじこみお勉強なので、間違っているところもあるかもしれんが、そしたら、ごめんなさい。
 で、具体的な話はJavaで説明してあります(GoF本はそういう限定ないと思うけど)



■生成について

 生成はふつうnewでやればいいんですけど、そーかんたんにいかないケースがあります。
 その話と、共通ロジックがあるとき、抽象的に書く部分と、具体的な部分にわけて、抽象的な部分に共通ロジックを書き、各具体論の差異は、具体的な部分にかけばいいんですけど、その場合の生成の話についてです。



■Singletonについて
 newで生成すると、オブジェクトがいっぱいできてしまいます。
では、システムに1個だけ、オブジェクトを生成して、みんなそれを参照するようにしたい場合、どうするか?シンクロナイズドにして、生成したかどうかのフラグをつくってえーとえーっと。。。そじゃなくって、

以下のようなクラスを作ります

1.staticにしてプライベートにして、オブジェクトをnewで初期化します
  →このとき、オブジェクトをシステムが読み込んだとき、オブジェクトを生成します
   でも、他の人は見れません
2.publicで、getInstanceという関数を作って、1のオブジェクトを返します。
  →そうすれば、みんなに(stsaticで1個だけとった)オブジェクトがかえる。
  →めでたしめでたし。。。

はい、つぎ



■Prototypeについて
 あるオブジェクトがコピーされた状態、つまり値が入った状態でほしいとき、どうします?
 newして、値を全部コピーして。。。その値がprivateだったらどうします?よそさんから参照して、コピーできませんよねえ。。。

 こーいうとき、Javaだと、Cloneableというクラスを継承すれば(extendsすれば)、cloneメソッドをつかって、コピーできます。
 めでたしめでたし

はい、つぎ




■共通部分をまとめて、スーパークラスとする

 ここからさきは、生成なんですけど、話が変わります。
 共通部分はまとめ、差異部分は、その共通部分を継承(extends)して、差異部分のみを記述したほうが、オブジェクト指向っぽくなります。さて、その場合における、生成の話です。



■FactoryMethodについて

 では、生成について、共通部分はまとめて、具体的な部分を差異として記述するには、どしたらいいでしょう。
 共通部分をスーパークラスとして、抽象クラスとして、具体的な部分をそのサブクラスとして継承すればできます。
 めでたしめでたし



■Builderについて
 では、抽象的なクラス(Builder)があって、それに対して、いくつかのサブクラス(これをconcreteBuilder1、2、。。。としましょうか)があったとします。
 実際に、生成されるのは、concreteBuilder1、2。。。のほうです。

 このとき、全部のサブクラス(concreteBuilder1、2。。。)にたいして、ある操作をしたいとします。どうしましょう。。

1.抽象的なクラスDirectorというのを作ります
2.そのDirectorが抽象的なクラス(Builder)を操作すると、実際にインスタンス化した、サブクラス(concreteBuilder1、2。。。)にたいして、Directorが操作を行います。

 この場合、Bulderを継承した新しいクラスを作っても、そのクラスにたいしてDirectorが操作を行います。理由は、そのクラスのスーパークラスBulderに対して、director画操作しているからです(その影響は子にも継承される)

 めでたしめでたし




■AbstructFactoryについて
 さっきのFactoryは、スーパークラスとサブクラスの関係でした。
 これは、プログラムを書いているときに、サブクラスを生成して、createするように書いてしまいます。
 でも、サブクラスが、複数あって、起動したときに、どのサブクラスを生成するかを決める場合は、どーすんの?

 もし、生成するスーパークラスが、なんらかの部品を呼んでいたりしたら、そいつも抽象クラスで、ぜーんぶ抽象クラスと、実際のサブクラス(このサブクラスは、実体の種類分)を記述し、プログラム起動時に、生成するサブクラス名をうけとり、抽象的なFactoryにそのクラス名をわたして、Class.forName(クラス名)すればいい。
くわしくは、 Java言語で学ぶデザインパターン入門
の95ページ-119ページ参照





ふえー、もう眠いのできょうはおしまい。
(朝または昼読んでいる人へ、これ、夜中に書いてます、いま、2時すぎ。。)
またこんど、暇なときします。


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

芸能証券が、芸能人仮想取引オンラインゲームを開始。ウィリアムのいたずらも参戦!

2006-08-22 20:20:08 | Weblog

芸能証券(って証券会社ではありません。念のため)が、芸能証券ででてくる株価をもとに、芸能人株を売買するシュミレーションゲーム、「芸★TRADE SNS」をはじめているみたいです。

ここのプレスニュース
カリン・パートナーズ、芸能人仮想取引オンラインゲーム&コミュニティ
「芸★TRADE SNS」(BETA版)を提供開始
http://trading.gse.jp/common/?action=press


さっそく、ウィリアムのいたずらも、新規登録して、参戦です!

まずは、平野麻樹子さん。。。あれ、ない。
小笠原亜里沙さん。。。ないじゃん(>_<!)
仕方ない、生物の桜木睦子さん。。あった。成り行きで買い!

アナウンサーは、松丸。。ない。(;_;!)
あ、森本さん安い。買い!
くらのさんは、あ、たかくなってる。。ちとまとう。

で、乙部さんは。。急に上がってるう。。。これも、ちとまとう
しょこたん(中川翔子さん)は。。。たかい、たかすぎ。

ってなわけで、桜木さんと森本さん、買い!成行!
あら、約定しない。。。
。。。取引時間があって、時間外は約定しないのね。。
明日まで、待つか(^^)。。。

ただ、これ、株価は、買いたい人と売りたい人に関係なく、というか、人気に関係ないので
(たとえば、亀田興毅799,000、中川翔子114,000、亀田興毅が高いのは人気ではなく、ネットでかかれることが多いから)いまいち、株価に実感がわかなかったりする。。(^^;)

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

基本的なコンピューターの内部(でやる業務)処理は、こんなかんじ。。。

2006-08-22 16:41:24 | Weblog

 さっきのブログの話のつづきです。
 コンピューターの処理には内部処理と外部入出力に別れ、

 外部入出力
   ○帳票出力
   ○画面操作
   ・ファイル入出力
   ・データベース処理
   ・Web通信
   ・メール送信、受信
   ・FTP
     :
     :
 (外部?内部?=外部の定義による)
   ・アプリ連携
   ・ソケット間通信

 内部処理
   ・外部データを内部用に変換する処理
       ・DOM/SAX(XML)
       ・CVS
       ・画像フォーマット変換
       ・コード変換
        :
   ・純粋な内部変換処理
       ・ソート
       ・マージ
        :

になるというところまで書きました。
では、ここで「純粋な内部変換処理」について、どんだけあるか、考えて見ましょう




 いろいろあるんですが、大きく分けると(研修なんかでやるには)こんなかんじ?

1.エディッティング/フォーマッティング
   ・数字の表現(カンマつき、小数点と桁数、0を前に付けるなど)
   ・日付、時間の表現
   ・文字列操作

2.四則演算、計算
  →これは、あまり研修対象には、ならん

3.分類(仕分け)
  あることを基準に、いくつかに分ける

4.ソート

5.マージ
 AとBの複数データ(リスト)があったとき、Bの複数データについて
   Aの中になかったら追加
   Aにあったら、上書き
 する

6.チェッキング
  ある項目をチェックし、該当したら表示=>検索
  ある項目をチェックし、該当しなかったら表示=>エラー出力
  ある項目をチェックし、該当したら一部表示=>選択
  ある項目をチェックし、該当したらレコードを合わせる=>Join

こんなかんじかなあ・・・




 なお、デザインパターンは、これよりも、もっと細かい単位となる。
 ユーザーに説明してもわかんないレベルである。

 ユーザーに説明するには、上記の内容の見える化が必要になってくる。
 システム開発者のためには、上記の内容のソースコードを示す必要があるが、それはJavaだと書けるので、こんど書いていこうと思うが、その前に、産能大式記号との関連のほうが、先かな?





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

プログラムは物理的に大きく入出力部分と、処理加工部分にわかれ、入出力部分は部品化できる

2006-08-22 12:42:19 | Weblog

 ユーザーの業務手順を、ユーザーが理解できる基本処理単位にまで分割し、その基本処理単位をライブラリ化すれば、あとは、それを組み合わせることにより、業務システムが構築できる(はず)。その基本処理単位を、産能大式記号をもとに考えたらどうなるだろうということを書いてきました。

 で、帳票・画面とやってきて、次に、話が大きく変わるのですが、その前に、全体システムと、今まで話してきたところ、今後話すところの位置付けについて書きたいと思います。




 システムとは、基本的に情報処理の分野です。情報処理というのは、情報を入力してなんらかの処理を行い、それを結果として出します。

つまり、情報入力→処理→情報出力の繰り返しです。ということは

 情報入力→処理→情報出力→情報入力→処理→情報出力→情報入力→処理→情報出力。。。

となるわけで、このとき、入力と出力はコンピューター外部、ということで1つにまとめると

システムは
  ・外部入出力と
  ・内部処理
にわかれます。




これを、他の枠組みに対応付けてみましょう。

たとえば、MVCの枠組みで言うと、
  ・外部入出力:V(View)とMの永続化部分(DB,ファイル保存)
  ・内部処理 :C(Control)とMの処理部分
というふうにMの部分が2つにわかれてしまいます。

 これが、セッションBeanとエンティティBeanに2つにわかれたり、O/Rマッピングとかが入ってきてしまう遠因になっています(データ処理に関しては、オブジェクト指向でいいが、外部入出力形式は、かならずしもオブジェクト指向で表現されているとは限らない(RDBのように)その場合、外部入出力用に、変換が必要になる)

ロバストネス分析のBCEの枠組みで言うと
  ・外部入出力:バウンダリ(B)とエンティティの永続化部分(DB,ファイル保存)
  ・内部処理 :C(Control)とエンティティの処理部分
となってしまいます。

 エンティティは、ソフトウェアシステム内部で半永久的に管理するデータとその振る舞いを定義します。つまり、エンティティはそのままデータベースのテーブルとなるか、もしくはデータベース設計の入力になります。とかかれますが(リンク先に引用元があります)。
半永久的というなら、ファイルもOKです。半永久的ですし、データベースをファイルにすることは日常茶飯事です(コード体系などを処理スピードのためにファイルあるいはプロパティ化する)。

 でも、バッチの場合、起動パラメータをファイルで渡すことができるので、バウンダリともいえます。ただ、これは原則論で、たとえば、Seasar2やSpring、Strutsの体系における、設定ファイルは、コントロールである、理由は、コントロールにはユースケースでソフトウェアシステムが行っている処理を定義して、とくにユーザのアクション単位の場合もあるけど、StrutsのActionの定義はまさに設定ファイルじゃん!といわれてしまうと、返す言葉もありません。




 なんで、こんな混乱が起こるかというと、外部入出力と内部処理というのは、コンピューターの物理的な特性でわけています(コンピューターの「物理的に」外部か内部か)。
 一方、MVCもBCEも、システムの論理的な構造(概念的な構造?)であらわしています。物理構造と論理(あるいは概念)構造は、一致しません。これはDBでもそのとーり!(3層スキーマ構造)です。

 ってかんがえると、枠組みとして明確に分かれるのは、コンピューターの外部に対して行う処理である外部入出力と、コンピューター内部の処理です。

 で、さらにいうと、外部の処理というのは、経験上、部品化できることがおおいです。
 つまり、外部入出力は、部品化しやすいです。

 そこで、外部入出力と内部処理の物理的な体系を見てみましょう

 外部入出力
   ○帳票出力
   ○画面操作
   ・ファイル入出力
   ・データベース処理
   ・Web通信
   ・メール送信、受信
   ・FTP
     :
     :
 (外部?内部?=外部の定義による)
   ・アプリ連携
   ・ソケット間通信

 内部処理
   ・外部データを内部用に変換する処理
       ・DOM/SAX(XML)
       ・CVS
       ・画像フォーマット変換
       ・コード変換
   ・純粋な内部変換処理
       ・ソート
       ・マージ
        :

 いままで、触れてきた話は、「外部入出力」の話で、これは部品化できるうえ、お客さんと合意がとりやすいです。なぜか。見えるから。。
 帳票はばっちり見えます
 画面も見えます。
 メールも大丈夫です。
 ファイルやDBは、表計算ソフトで、表形式にして、合意をとるのがいいと思います。

 一方、内部処理はよくわかんないです。この、内部処理の「見える化」が必要になってきます。




 で、次回からは、この内部処理になります。
 内部処理の「見える化」=ユーザーにも分かる形にすれば、外部入出力はユーザーにも分かるので、あとは、設計標準をつくり、それをプログラム標準とあわせるっていうことですね。

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

プレステ”4”の噂話が本当なら、AJAXのRPGとか、そーいうのが出てくるんでしょうか?

2006-08-21 22:07:19 | Weblog

ここのはなし
プレステ4に関する噂話
http://www.gizmodo.jp/2006/08/4.html

にこんなことが書かれています。
(以下斜体は上記サイトより引用)


まだプレステ3すら出ていませんが、SCE WWS(SCEワールドワイド・スタジオ)の社長、フィル・ハリソン氏は、既にその先を見ているようです。

彼によると、プレステ4では、CD-ROMやDVDのような、物理的なディスクは用いられないだろうとのこと。彼は「もしプレイステーション4が物理ドライブを持っていたら、私は驚いてしまうよ」と言っています。


 えーっとえーっと、ってことは、ゲームはオンラインゲーム化するってことなんでしょうか?
 AJAXのRPGとか、そーいうのが出て、ブラウザだけあればOKってなるとか。。

 たしかにゲームのAJAX化は、ありでしょうな。。
 流通をどうするか(会員制にして、お金取る??)も含めて、検討課題はありますが。。

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

AJAX格付け

2006-08-21 16:53:03 | Weblog

AJAXカクヅケ!というサイトがあります
ここ http://ajaxranking.com/
そこによると。。
(以下斜体は上記サイトより引用)


AJAX格付けとは?
AJAXを中心に、ブラウザだけで使えるwebアプリを評価。


そして


(8.18)AJAXボードオープン! ajax系セミナーや求人の告知などにご利用ください。

だそうです。
ほー、AJAXも格付けですか(^^)

ちなみに、そのニュースはこちら
AjaxなどのWebアプリケーション比較サイト「AJAX格付け!」
http://internet.watch.impress.co.jp/cda/news/2006/08/17/12992.html


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

Strutsの画面前処理方法について(JSP表示データをセッションで持たせる)

2006-08-21 14:42:02 | 開発ネタ

 さて、以前のブログで、画面処理について必要なのは
  ・画面間の画面遷移(遷移先とその条件)
  ・各画面の内容
     入力項目/出力項目(入出力項目も含む)の
       値について(int,文字列)と範囲、制限
       値の種別(SA,MA,FA)
        →実現する画面部品
       レイアウト(項目の位置)
        :これについては前回書き忘れました
     各種イベント時の処理
       ・画面初期表示
       ・部品によりおきるトリガー
        →Submitボタンが押されたなど
       ・画面終了時
 となります。

 ここで、画面をHTMLで表現し、イベント時の処理を、メソッド何々を呼び出すとしてしまえば、あとは、その呼び出す引数さえ、固定化する(きまりをつける)と、
  HTMLを作成し
  呼び出すプログラムを設定ファイルに記述
 すれば、この画面処理は、部品化できることになります。こうして部品化したものが、Strutsとなります(ただし、部品化とはいわず、この場合、フレームワークとよぶけど)




 ところが、ここで、Strutsで困ったことがあります。

 「部品によりおきるトリガー」に対しては、どのメソッドが呼ばれるというのは、明確に記述でき、それには、きまりがあります。なんとか.doというURLで呼び出され、Actionクラスを継承したクラスのexecuteメソッドが呼び出されます。そして、そいつが、次の画面を返します。

 でも、画面の終了時と画面初期表示は、どこに書けばいいんでしょう。

 ここで終了時は答えは明白です。

 「部品によりおきるトリガー」で呼び出されるクラスのexecuteメソッドは、これが終わると、次の画面のJSPをシステムが呼び出してしまいます。なので、その前(=次の画面表示の前)に、今の「画面の終了時」処理を行わないといけません。

 ということは、「部品によりおきるトリガー」のなかで、「画面の終了時」処理を行うということです。つまり、Strutsの場合は、この2つをまとめて仕様書に書く形になります(というか、他のケースでもそうなんだけど、フレームワークごとに仕様書は作り変えたほうがわかりやすい。汎用的な画面仕様書をつくると、整理しやすくても、誤解を招きやすい)。




 では、画面初期表示は?

 かける場所は(ふつうは)2つあります。
 (これ以外にもあるかもしれませんが、実務上、この2箇所がおおいです。なお、ここでは、ダイナアクションフォームで初期値を与えるといった、簡単な初期表示処理ではなく、検索してマッチングしてソートしてほんでもって、とかいう、複雑な処理が必要なケースをさします)

1.「部品によりおきるトリガー」のなか、「画面の終了時」処理のあとに、次の画面の初期表示処理を書く。

2.もう1つは、JSPの中にかく。

 2のやり方は、画面とプログラムが分離しないのでよくないといわれます。
ただ、これも、やり方の問題で、JSPから、メソッドを呼び出して、そこに全部書いてしまえば、まあ、ほぼ分離しているといっていいかもしれません。それ以上に、Strutsの場合、Strutsタグをいれておいて、画面とプログラムの分離といってもねえ。。デザイナーさんにStrutsタグがわかるわけでなし。。。という意見があります。

 1の場合は、次の画面のActionFormの実体が前の画面のAction内で取れるわけではないので、実質無理があるのと、それ以外でも、いろんなところから、ある画面が呼ばれている場合、修正するのは、かりに1つのメソッドを呼んでいたとしても、それに伴う変更がどこまで派生するか。。とか考えると、あまり得策でもないです。

 ということで、良いか悪いか別として、2のJSPの中に、画面初期表示に必要な処理を行い、その結果の値を表示するということになります。




 で、問題は、かりに、「JSPの中に、画面初期表示に必要な処理を行う」場合、それに必要なデータをどこにしまっておくかということですが、このときセッションを使います。
 前のブログで示したように、サーバー側の処理において、処理を行った後JSPに値を渡すには、べつにサーバ側だけでセッション処理を行えばいいだけなので、これは可能な話になってきます。

 つまり、
   次の画面表示に必要なデータは、すべて、セッションに入っているように、
   あらかじめ、用意しておいて

   画面表示をするとき、初期処理が必要なら、JSPでセッションから
   値をとってきて、それをセットする

 という手段をとることによって、対応可能です。




ということで、Strutsの場合
     各種イベント時の処理
       ・画面初期表示
         →JSPの中
       ・部品によりおきるトリガー
         →ActionのExecuteの処理
       ・画面終了時
         →ActionのExecuteの中での処理
という形で、画面の処理を記述することができます。




 ということで、産能大記号の画面関連については、これでOKということにして、このシリーズは、次の記号に行くことにします。



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

セッションについて、画面間にわたるデータ交換”以外”の利用法。。。

2006-08-21 12:25:57 | 開発ネタ

 Strutsでの画面前処理の話を以前のブログですると書きましたが、その前に、セッションについてまとめておく必要があるので、ちと書いておきます。

 セッションは、画面間で、データを受け渡しするのに、普通使います。
  PHPだとこんなかんじ
  (ただし、Cannot send session cookie(このあとつづく)っていうエラーが出る場合はここ
  Perlだとこんなかんじ
  JSPだとこんなかんじで、
  Javaのサーブレットだとこんなかんじ
 とまあ、こんなかんじになります。

 では、セッションでは、なにをやっているのかというとまとめると、結局
・画面間で、データの受け渡しをするのに、サーバー側にデータ置き場を用意しておき、クライアントにセッションIDをわたすことで、どこの置き場のデータを使っているということがわかるようにして、データを受け渡す
 という方法でした。

 つまり、こんなかんじ。


 で、これを実現するためには、クライアントの画面にセッションIDを渡して、クライアントからはそのIDを返してもらわないといけません。
 そのためには、クライアントに
1.クッキーを使ってもらうか
2.セッションIDをURLに設定して(SIDやSessionIDとなるのがふつう)
 とってくるのがふつうです。




 なお、上記の図のように、セッションは、サーバー側にあるものなので、
Javascriptでクライアントからセッションのデータを操作するというのは、
常識的には出来ません(AJAXで非同期でなんかして。。。とか、
そーいうことを、今考えないとして=常識的に)。

 また、別にセッション以外でも、このことと同じことは実現できます。
 1セッションごとにファイルやディレクトリ(=フォルダ)を用意して、
そこに書き出し、セッションIDのかわりに、そのファイル名をクライアント
に受け渡しすれば、OKです。
 もちろんHiddenですべてのデータをわたしてもいいし。。

 この場合のメリットは、AJAXを利用する場合、比較的簡単にサーバ側データ
が取得できるということです。セッションに入っているデータをとってくるというと、
いろんなからくりを作らないと無理っぽそうですが、ファイルをXMLで書き出し、
そのファイル名をクライアント側に渡してしまえば、あとは、フツーのAJAX
でのXML取得の話でs。




 で、今回は、そーいうことをいいたいんじゃなくって、

 クライアント側で、仮にクッキーも受け付けず、URLにもいれない、つまり、セッションは一切使いたくないとしたとします。
 それでも、サーバーからみると、サーバープログラムと、その直後のJSPにおいては、セッションを利用して、データを受け渡すことは可能だということです。

 たしかに、複数画面のデータ受け渡しにはセッションIDをつかって、セッションをみつけるので、セッションIDがないとこまります。なので、クライアントでセッションIDを受け渡すことを、上記のように拒否された場合、”複数画面間での”データ受け渡しは出来ません。




 しかし、”1画面を出力するまでの”サーバープログラムと直後のJSPの関係においては、クライアントはでてこないので、ここでセッションを利用して、データ共有することは可能です。つまり、”1画面内で複数プログラムがあるときの”データ受け渡しは可能です。

 おなじことが、PHPプログラムにもいえます。
 サーバー側でPHPプログラムが1画面を出力する間に複数動く場合、セッションに処理したデータを突っ込んでしまえば、そのプログラム間でセッションによるデータ共有は可能です。
 ただし、複数画面における画面間でのデータ共有は、クライアント側で、セッションを利用できるように(=クッキーを受け入れるか、URLにセッション番号を付けることをOKとする等)しないとできません。




 この特徴を使って、MVCにプログラムをわけて、各プログラムにおいて、他プログラムに渡したいデータをセッションにいれてしまい、データ共有させたのが、カオル姫方式です。

 ということで、Strutsの話ができそうです。





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

モバイルシステムのシステム設計の手順、考え方が書いてある本

2006-08-20 23:50:10 | Weblog

このほん
モバイルシステム技術テキスト(エキスパート編)
MCPCモバイルシステム技術検定試験1級対応
モバイルコンピューティング推進コンソーシアム監修 ISBN : 4-89797-670-7


(注意、エキスパート編のほう、エキスパート編とかいていないほうもあり、それには、システム設計の手順とかは書いてない)

 きょう、御茶ノ水の三省堂でみて、
「おおお・・・」
と思ったが、お金が無かったので買ってこなかった。

 ちゃんと見てこなかったので、今度よーくみてこようと思ったが、忘れてしまいそうなのでメモ。(というわけで買ってないうえに詳しく見てないので、何ページにあったかっていうのはわすれた。フローチャートみたいなかんじで、経営目標みたいなかなり上位から書いてあったと思った。記憶違いまたは、たいしたこと書いてなかったらごめん ^^;
もし、買おうと思った人は、内容を確認した方がいいと思います。もちろん、買うかどうかは自己責任で。。。)。


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

エントリーシートに所属学会や論文記入を求めたのは、大学にとって大きな追い風!

2006-08-20 17:47:44 | Weblog

ここのニュース
情報処理学会、ITベンダー各社の新卒採用エントリシートに所属学会欄を要請
http://slashdot.jp/articles/06/08/19/1312205.shtml


 これって、理工大学で、一流ではないけど、教授と学生の距離が近くて、学生・院生と一緒に論文多く出しているい大学には有利かも。

 っていうのも、たしか情報処理学会って、学会に入るとき、紹介する人が必要じゃなかったっけ?(ウィリアムのいたずらは、大学卒業して入った会社のある幹部の人に、その紹介人になってもらった記憶がある)

 さらに論文発表ってなると、査読を通すには、まあ、大学の先生の指導が必要だろう。
 とすると、エントリーシートにそんな欄ができると、実際に、なんか埋めなきゃ!と思う学生・院生は多いわけで、そーすると、ゼミが充実していて、教授と学生の距離が近い大学や、教授が査読委員の大学や、ある時期になると、情報処理学会論文誌に、いっぱいその学校の学生の論文が載るような大学などは、学生から、有利に思われて、人気が出るかもしれない。

 ってことで、これは、学会と、大学に有利な話してすな。
 そーするとITSSの基準なんかでも、論文出してると、2階級特進みたいなのがでてきて、またまたITSSわかんねー(>_<!)ってことになるんだろーか?

P.S これを読んで、ある特定の大学が頭に思い浮かんだ人、別に特定の大学について書いている話題ではないんだけど、たしかにウィリアムのいたずらも、ある特定の大学が思いついたことは確かです。
 生協との距離が近いことも重要だよなと思った人は、ウィリアムのいたずらと同じ学校を想像していると思います。まちがいない!



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