Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

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

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

鉄腕アトムの携帯電話が中国限定で売っているらしい

2006-08-24 23:13:07 | Weblog

ここの話

鉄腕アトムの携帯電話
http://www.gizmodo.jp/2006/08/post_119.html

によると、中国限定で、鉄腕アトムのケータイが売っているらしい。
たしかに、いたるところでアトムだぞ!

日本でも出せばいいのに。。。

パテントとか、大丈夫なんでしょうねえ。。。

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

インプレスも萌えニュース市場に参戦!それも、動画で。。。

2006-08-24 19:52:57 | Weblog

とうとうインプレスも萌えニュース市場に参戦したようだ。
それも、動画で。。。

ここのサイト

Impress Watch 動画ニュース 萌えバージョン
http://www.impress.tv/im/article/whm/


ニュースの内容は、 ソフォス、ルートキット駆除ツールを無償公開などなど、いたってまじめなのだが、メイド服をきたおねーさまが、それふうに言うので。。。

 途中(他のニュースで、だが)、「ご主人様」という言葉が何度も出てくるので、会社では見ない人がいいだろう。怪しい人に思われてしまう。。




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

Javaで基本操作(その2):ソートする

2006-08-24 15:51:46 | JavaとWeb

Javaで基本操作シリーズ、前回はマージだったので、今日はソートです。

ソートはJavaの場合、Arrays.sort(キーの配列)でソートしてくれます。

なので、こんなかんじで、ソートできます。


●仕様1
 キーは、時間、値は1レコード分のデータ(下記)を、レコード数分、ハッシュマップに入れて、時間の昇順にソートして出力する。

  1レコード分のデータの構造は
    キーに時間(time)、チャンネル(ch)、番組名(title)、
    値にそれぞれの値を入れた
  HashMap。

●ソース1
import java.util.*;

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

		//	データ
		rec = new HashMap();
		rec.put("time","19:00");
		rec.put("ch","8");
		rec.put("title","バレーボール");
		moto.put("19:00",rec);

		rec = new HashMap();
		rec.put("time","23:00");
		rec.put("ch","12");
		rec.put("title","WBS土曜版");
		moto.put("23:00",rec);

		rec = new HashMap();
		rec.put("time","24:00");
		rec.put("ch","4");
		rec.put("title","うるぐす");
		moto.put("24:00",rec);

		rec = new HashMap();
		rec.put("time","26:30");
		rec.put("ch","3");
		rec.put("title","平野麻樹子の地学");
		moto.put("26:30",rec);
		
		//	ソートする
		Object[] key = moto.keySet().toArray();
		Arrays.sort(key);
		
		//	表示する
		for(int i = 0 ; i < key.length ; i ++ )
		{
			rec	=	(HashMap)moto.get(key[i]);
			System.out.println(rec.get("time") + " " + 
                               rec.get("ch") + ":" +rec.get("title"));
		}					
	}
}

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

つまり、
  Object[] key = moto.keySet().toArray();
で、ソート対象のキーを取り出し
  Arrays.sort(key);
でソートします




 これが、降順の場合は、
 // 表示する
 for(int i = 0 ; i <key.length ; i ++ )

 // 表示する
 for(int i = key.length-1 ; i >= 0 ; i -- )
にかわるだけです。




 キーが数字の場合は、前に0を足して桁数を揃えます。
 (そうしないと、文字列でやった場合、正しくソートしません。
  KeyがIntegerのオブジェクトでやるなら、足さなくてもいいですが)

 キーが、大項目、中項目、小項目とあるとき、タブまたは空白でつなぎます。
 (空白を使っていない場合は空白でOK。キー項目に空白がある場合はタブ)


●仕様2
 キーは、時間、値は1レコード分のデータ(下記)を、レコード数分、ハッシュマップに入れて、チャンネル番号、時間の昇順にソートして出力する。

  1レコード分のデータの構造は
    キーに時間(time)、チャンネル(ch)、番組名(title)、
    値にそれぞれの値を入れた
  HashMap。

●ソース2
import java.util.*;
import java.text.*;

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

		NumberFormat nf = NumberFormat.getInstance();
		nf.setMinimumIntegerDigits(2); //	2桁で表示
		
		//	データ
		rec = new HashMap();
		rec.put("time","19:00");
		rec.put("ch","8");
		rec.put("title","バレーボール");
		moto.put(nf.format(8)+ "¥t"+"19:00",rec);

		rec = new HashMap();
		rec.put("time","23:00");
		rec.put("ch","12");
		rec.put("title","WBS土曜版");
		moto.put(nf.format(12)+ "¥t"+"23:00",rec);

		rec = new HashMap();
		rec.put("time","24:00");
		rec.put("ch","4");
		rec.put("title","うるぐす");
		moto.put(nf.format(4)+ "¥t"+"24:00",rec);

		rec = new HashMap();
		rec.put("time","26:30");
		rec.put("ch","3");
		rec.put("title","平野麻樹子の地学");
		moto.put(nf.format(3)+ "¥t"+"26:30",rec);
		
		//	ソートする
		Object[] key = moto.keySet().toArray();
		Arrays.sort(key);
		
		//	表示する
		for(int i = 0 ; i < key.length ; i ++ )
		{
			rec	=	(HashMap)moto.get(key[i]);
			System.out.println(key[i] + ":" +
                                rec.get("title"));
		}					
	}
}

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

キーの入れ方が仕様1と変わっています。

NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumIntegerDigits(2); // 2桁で表示

で2桁表示にして、
  nf.format(チャンネル番号)
で、2桁でチャンネル番号をあらわしています(1桁だと前0がつく)





 1つのキーに対して、レコードがいくつもある場合は、
 キーは、ソートキー、値はそのキーが入ったレコードのVectorにして
 そのVectorに、各レコードのハッシュマップを入れます。

●仕様3
 キーは、時間、値は1レコード分のデータ(下記)を、レコード数分、ハッシュマップに入れて、時間の昇順にソートして出力する。ただし、時間は、同じ時間のものがある。その場合のソート順は問わない。

●ソース3
import java.util.*;
import java.text.*;

/*
 *  Sortのテスト
 */
public class test {
	/*
	 * 	メイン処理(呼び出し元)
	 */
	public static void main(String[] args) {
		HashMap moto = new HashMap(); // 元のデータ(ここに追加する)
		HashMap henko= new HashMap(); //	変更分データ
		HashMap rec;		  //	1レコード分データ
	         Vector  vec;	//	レコードが入ったベクター

		
		//	データ
		rec = new HashMap();
		rec.put("time","19:00");
		rec.put("ch","8");
		rec.put("title","バレーボール");
		vec = (Vector)moto.get("19:00");
		if ( vec	==	null )
		{
			vec	=	new Vector();
		}
		vec.add(rec);
		moto.put("19:00",vec);

		rec = new HashMap();
		rec.put("time","23:00");
		rec.put("ch","12");
		rec.put("title","WBS土曜版");
		vec = (Vector)moto.get("23:00");
		if ( vec	==	null )
		{
			vec	=	new Vector();
		}
		vec.add(rec);
		moto.put("23:00",vec);
		
		rec = new HashMap();
		rec.put("time","24:00");
		rec.put("ch","4");
		rec.put("title","うるぐす");
		vec = (Vector)moto.get("24:00");
		if ( vec	==	null )
		{
			vec	=	new Vector();
		}
		vec.add(rec);
		moto.put("24:00",vec);

		rec = new HashMap();
		rec.put("time","26:30");
		rec.put("ch","3");
		rec.put("title","平野麻樹子の地学");
		vec = (Vector)moto.get("26:30");
		if ( vec	==	null )
		{
			vec	=	new Vector();
		}
		vec.add(rec);
		moto.put("26:30",vec);

		rec = new HashMap();
		rec.put("time","19:00");
		rec.put("ch","3");
		rec.put("title","サイエンスZERO");
		vec = (Vector)moto.get("19:00");
		if ( vec	==	null )
		{
			vec	=	new Vector();
		}
		vec.add(rec);
		moto.put("19:00",vec);
		
		//	ソートする
		Object[] key = moto.keySet().toArray();
		Arrays.sort(key);
		
		//	表示する
		for(int i = 0 ; i < key.length ; i ++ )
		{
			vec	=	(Vector)moto.get(key[i]);
			if (vec	==	null )
				continue;
			for(int j = 0 ; j < vec.size() ; j ++ )
			{
				rec = (HashMap)vec.elementAt(j);
				System.out.println(rec.get("time")+ " "
                                     + rec.get("ch") + ":" +rec.get("title"));
			}
		}					
	}
}


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

データを入れるところが違って、
 vec = (Vector)moto.get("19:00");
という形で、今、いれようとするところのVectorを
とってきます。新規のときはnullになるので
 if ( vec == null )
 {
  vec = new Vector();
 }
で生成したあとに

 vec.add(rec);

で、レコードを追加、このVectorを
 moto.put(時間,vec);
でPutします

取り出すときは、
いちど、Vectorを取得し、そのVectorのデータを順々に表示していきます。




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

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

東京MX、YouTubeにテレビ番組を配信

2006-08-24 14:17:29 | Weblog

ここのニュース
東京MX、YouTubeにテレビ番組を配信
http://headlines.yahoo.co.jp/hl?a=20060824-00000019-zdn_n-sci


配信しちゃうんですか(@_@!)
すげー。。
番組中に流れるCMも配信するのかなあ。。


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

パッケージソフトは、コストが高いのよ。ダウンロードにしてもコスト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でシェアする