goo blog サービス終了のお知らせ 

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

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

見積もりの時間とか、期日の根拠って、何?

2005-08-24 14:52:10 | Weblog

 昨日のブログに、トラックバックをつけていただいたので、昨日のブログのフォローを、しておきますね。

 昨日のブログの内容は、はぶさんのいいたいこととは、もちろんちがうわけです。
 はぶさんとm_pixyさんの話自体は、もとのブログの中で、完結しています。

 昨日の話題は、そこにかかれてあるとおり実行したら、どうなるのか?という話(必要性うんぬんではなく)。

 で、その話をする前に、見積もりなどで出す時間には、何種類かあるという話をしないといけないので、その話を今日はします。




見積もりなどでかく時間には、ウィリアムのいたずらが意識してるので、3種類あります。もっと、あるかもしんないけど。。

1つは、デッドライン。

 お金のフロー上、この日に終わらせないといけないというもの。
 たとえば、この日に納品しないと、検収日がこの日にならないので、入金がこの日にならず、お金が工面できないとか、

 パッケージソフトで、この日にSONYにゴールデンディスクを持っていかないと、キャンセルということになってしまって、そのあと、大きなゲームが入ってるから、CDやきやき日がとれないので、この日に、絶対仕上げてね!(SONYでなく、オプトコムだと、融通が利くかもしれないのでSONYにしました。SONYとオプトコムはCDやきやき会社)
 こういうとき、この日が絶対です。やり方なんか、関係ないです。
 この日に持っていければOK,もっていけなければ、クビ、悪ければ倒産というやつ。こういう場合は、日付を固定して、そのための作業項目を考えます。


2番目は、目標時間
 この日に、終わらせたいというもの。
 もし、この日に終わらなかったら、計画を立て直せばいいというもの。
 この日に終わらなければ、評価は下がり、ボーナスや給料は下がるかも知んないけど、致命傷(クビとか倒産とか)にはならないもの。
 PDCAというよりは、PDSに近いやりかたになる(C(ないしはS)に対するAを行うよりかは、新しいPを立てる形になることが多い)。そういう意味で、リアルオプションっぽい。


3番目は、標準時間
 原価計算に使う時間。この作業は、このくらいの時間かかるはずというのがでていて、それをもとに管理する。この場合、PDCAサイクルになる。(遅れたぶんについてCで確認し、それをAで取り戻す) 




 で、ここで、目標時間で管理すべきものを、標準時間で管理すると、下の人間は大変になるんです(問題が起きたら、標準時間で解決しないから)。

 で、さらに、目標時間管理の場合は、Pでのプランが1通りだと、こまるわけです。できないケースっていうのもあるから。

 なので、時間の出し方については、情報処理試験でおなじみのように、楽観ケースと悲観ケースと標準ケースの3ケースをだし、それをある比率をかけてもとめるということをするわかです。
 ただ、その場合、悲観ケースに陥っていたら、当然、時間はかかるのに、それを目標時間でやろうとすると、品質がおちたりするというわかです(これが昨日のブログの後半のほうのお話)。




 じゃあ、標準的な工程が決まっている場合、標準時間を導入できるか(これが、昨日のブログの前半のお話)というと、その条件があるのですが。。。

 こんな話、おもしろくないですよねえ。。。

 経営学の実践と理論の乖離についてのおはなしなんて。。

 コンピューターに関係ないもんね。

 とおもって、つづきは、次回にということにしました。。。
 見てくれてる人が、多かったら書こうと。。
 でも、多くなかったから、まあ、いいや(^^)

 本当は、この先がおもしろいんだけど。。。。
 (ホーソン実験の応用としてのスクラムの利用と、おねーちゃん管理法とか)

 つーことでした。フォローおしまい。
  

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

なんとか仕様書作成に何分というような標準作業時間を決める場合の問題点

2005-08-23 19:53:09 | 開発ネタ

 またまた、m_pixyさんのブログ「PM見習いの読書日記」のツッコミ?で申し訳ないんだけど。。

 やっぱ、下請け仕事中心のウィリアムのいたずらとしては、「うーん」と思ってしまうので、ちっとひとこと。

コメントにあった


、○○仕様書作成25分、××仕様書作成18分、みたいに決められて、ズレを発見する仕組みができあがっています。


 これ、いわゆるマネジメント理論の最初に出てくる、「科学的管理手法」の標準(作業)時間ですよね。テイラーが導入した。。で、それについて、ズレ(はい、簿記用語でいう差異ですな(^^)v)をもとめるっていうのは、原価計算の基本になってきますよね。

 で、これについて、最終的に納得してしまわれていますが、ちょっち問題ありっす。今回は、その話。




 この手法が利用できる前提があります。

(1)すべての作業が読めていて、作業が、中断されないこと
 →テイラーは、この標準時間を求める前に、仕事に対する作業分析を完璧に行っている。作業が読めない場合、この時間は、単なる目標時間になってしまう。

(2)作業が連続される場合、標準時間で行うことは、実は困難。
 「虹色ディップスイッチ」っていう、ゲームの本に書かれていたと思う。各部分についてクリアできるというゲームをいくつか並べて、実際にプレイしたら、おそろしく困難なゲームになったって話。つまり、連続して、ハイペースでこなすことは困難つーより、不可能。

 ということは、この手法で開発を行うには、仕様書作成からやるべきことが、すべて完璧に読めないといけません。




 で、すべて読める場合、このプロセスは、人間がやるべきでなく、機械化させるべきです。というのは、人間がやるには、危険性があります。

 その危険とは、(2)に指摘したことです。同じことをハイペースでやらせると、うまくいけば、経験が増えて、短時間でできますが、下手すると、ノイローゼになります。
 どんなにどんなにこなしても、まだまだ仕事がきて、それをハイペースでこなさないといけないんだから。。。オーバーアチーバー状態、その先にあるのは、「燃え尽き症候群」だあ!(ここ、なぜ、オーバーアチーバーになって、そうすると燃え尽きになるかは、心理学的な話になるので省略)

 てーことで、もし、手口が完全に見えているなら、自動化、ただし、大掛かりなプログラムをつくるんでなく、一部、アドホックなプログラムを寄せ集めるかんじで。。ウィリアムのいたずらの場合、こういうときは、Excelっすね(とかいって、結構手作業しちゃうけど。。こういうとき、正規表現を扱えるエディタなんかやawkとかが重宝するのかなあ??)

 てーのがよかったりする。




 一方、作業内容が固まってないのに、これは、このぐらいでできるだろうと類推して時間を決めた場合は、たいへん。

 その時間で、できないケースが続出する可能性あり。

 そうすると、その時間は無視されるか、目標時間となってしまう。

 目標時間となった場合、時間に終わらせるため、品質が落ちてくる。
 (よのなかそういうもんだ)

 そうすると、後工程が大変になる。潜在的バグの入る可能性あり。




 っていうことで、標準時間の導入は、工業製品の場合OKなんだけど(作業工程が見えているから)、工業製品の開発や、ソフト開発のような不確定要素が入る場合、ちがった管理方法をつかったりする(リアルオプションに近いような考え方。ここからメルクマークとかフェーズドアプローチなんかが出てくる。TDDの根拠を、お偉いさんに説明する場合に使う)。

 っていうことを、下請け会社は知ってても、発注元は、きっと、標準時間の導入、さらにそれが発展したFP(ファイナンシャルプランナーじゃないよ、ファンクションポイント)なんかで考えるんだろーなー。

 当然そこには、上記の危険が含むわけで、それへの対策も、下請けは、かんがえないといけないよねえ。




 あと、標準時間導入のためには、もうひとつ肝心なことがあって、そのことのネタを書こうと思ったんだけど、長くなったんで、このへんで
 結局、まえふりで終わってしまった(^^;)


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

1次請け、2次請けの人が、3次の中小ソフトハウスに転職すると。。。

2005-08-23 11:33:31 | Weblog

 そうそう、1次請け、2次請けの人の話が出たので、そういう人の転職の話。
 1次請け(たいてい大手企業)、2次請け(大手の子会社)の35歳以上の人なんかが、マネージャーになって、3次の中小ソフトハウスに転職すると、問題が起こることがあります。




 というのは、1次請け、2次請けの人のマネージメント対象は、自社の人や、3次の中小ソフトハウスのマネージャーです。自社の人たちも、その人たちは、たいてい、中小ソフトを下請けに使っているケースがおおいです。

 つまり、1次請け、2次請けの人のマネージメント対象は、同じマネージャー職、同業者が中心となります。なので、マネージャーの感覚で、仕事が進むことが多いです。

 しかし、3次の中小ソフトハウスに転職すると、管理対象は、現場の人ないしは、4次請けの末端業者(=フリーなんかの、これも現場の人)です。そうすると、現場の感覚とマネージャーの感覚は、かなり違うことがあり、問題が起こることがあります。




 現場のマネージメントの場合、現場の人の能力は、かなり違います。
 したがって、指示を出すには、自分が、そのシステムを開発できる(少なくともやり方を1つ以上知っている)ことを前提として、その中で、なにを、担当してもらうかを決めるという形になります。

 つまり、現場の場合、

・やるべきことが、可能であることを読みきっている。
・なにをそのためにしないといけないか知っている
→結論として、自分が開発できる

ということになります。

 でも、マネージメントのマネージメントの場合、自分が開発できなくてもOKです。マネージメントさえできれば。。




 で、開発担当者と、マネージャーの感覚というのは、結構差がある。
 開発担当者だと、「キター」とおもって、これでいける!と思っても、マネージメントしかやってない人には、「大丈夫なの?」と思ってしまったり。。。

 まあ、ただ、このぐらいの差なら、考え方の違いなんで、感情論で済むんだけど、

 実際に、やばやばの開発になった場合、開発現場でまとめて抑えるということができず(というか、その方法論がわからない)変なところで、お客さんに報告して、現場めちゃくちゃにしてしまうこともありますよね。




 っていうことで、1次請け、2次請けの人が、3次の中小ソフトハウスに転職するっていうのは、あんまりいい方法では、ないかもしんないよ(プライドがずたずたにされるとか、そういう部分は、今回省略しております。機会があったら、そこのへんにも、ふれてみますが。。)


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

でも、人月単価って、結局、力関係なんですけどね

2005-08-22 23:08:39 | Weblog
 あ、まえに、人月単価について、えらそーに書いてますが、一言付け足すと、この金額は、とてつもなく、差があります。
 だから、皆さんのところとは、かなり違うかも。。。

 結局、人月単価って、下請けの場合、その発注元との力関係によって、かなり違ってしまうので。。

 で、その力関係というのは、技術力というよりは、政治的、経済的な影響のほうが、大きかったりします。

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

NEC、ルーター不具合で無償交換=3万5000台、全機能停止も

2005-08-22 20:59:19 | Weblog
ここ

こいつもメモ。でも、何でこの記事、コンピューターじゃなくって、株式ニュースなんだあ??

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

YAHOOミュージックのサウンドステーションは、無料で曲がきけるらしい

2005-08-22 20:23:05 | コピーされるほど儲かるシステム!
それもフルコーラスで。ここ
ちょっとメモ(すみません、自分の家であとで聴くためのメモなので、こんだけしか内容ないです)。

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

35歳以上の人が会社に増えると、大手の常駐仕事を増やさないといけない理由?

2005-08-22 18:29:53 | Weblog

 前のブログのkdmsnrさんのコメントへの回答です。
(これも、ウィリアムのいたずらの独断と偏見で、ほかの人は違う意見を持っていると思います)




コメントにお書きになっていた、

> 35歳以上の人にもっとお金を払い、システム設計だけやらせて、その分、
> 若手をプログラム側にまわし、給与を安くして、残業を多くさせると、
> ちょうどいいあんばいになりますよね。

の部分は、

> 大会社に所属してるとか、有名人とかがシステム設計を担当した場合って感じな
> のでしょうか。

のほうではなく、

> 3次請け以降の場合は、その人以外の人と、調整しているかんじだと思います。

 というほうに該当します。つまり、若手と35歳以上で調整します。

 で、具体的に言うと、2次請けないしは、有力な3次請けが、このパターンに該当します。で、年収レベルでいうと、これらの会社は、500万前後、ないし500万円を超えますが、それ以下の一般3次請けだと、400万円台かよくて500万円台だとおもいます。ウィリアムのいたずらのようなへっぽこ3次、4次請けは、もっともっと低くなってくるわけです(;_;)(500万は、ほど遠い)

 1次請けや、有名人の場合、これより高く出せます(600万以上でもOK、1次請け=マージンがないから)

 なお、派遣は、これより、若干高い値段になります。
(月50万くらいか、それ以上。派遣会社の取り分と、一般企業の取り分、リスク負担が違うから)




 もっと、金額を具体的に書きますね。

 35歳以上の人1人に、年収500万くらい払い、それ以下の25歳くらいの人2人に年収350万くらいはらい、平均400万にすると、「いいあんばいになります」(ちょっと極端すぎるけど、計算しやすいから)。

 年収400万平均ということは、月平均33万円強になります。なので、1人月単価を70万で出して、60万、最悪、50に減らされてもどうにか。。。きついな(>_<!)っていう感じです。

 ただ、この場合、危険率(仕事がないとか、延期する)をあまりみていません。
 そこで、この形でやるには、危険率の低い仕事でやらないといけません。

 大手企業の常駐の場合、仕事が続いてくるのと、延期したばあい、減額とかはあるものの、お金が取れるケースが多いので、自社で、直接ユーザーから仕事を請負のより、リスクが小さいです。

(というか。。。いっていいのかなあ。実は、大手の常駐の場合、値段を決めないで請けるという話もあるんです。はいみましたね。あとで削除するかも。この行)

 この「危険率があると、やっていけないから。。」というのが、大手常駐が多い理由の1つだと思います(もちろん、「仕事がきちゃうから」ということが、一番の原因だけど)。


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

システム設計の1人月単価はいくらくらい?

2005-08-22 13:36:29 | Weblog

 kdmsnrさんのコメントに、「システム設計の人月はいくらくらいなのでしょうか?」、といただいたので、今日は、この話題。

 これ、会社や立場(一次請けか、末端の3次、4次などか)によってかなり違うと思うので、ウィリアムのいたずらの環境(*)における、独断と偏見の話です。

*注:ウィリアムのいたずらは、だいたい3次請けないしは4次請けの末端です
(開発する人。これ以下に発注することのない人)

 1次請け(大手)、2次請け(大手の子会社または、大手に口座を持っている)の人たちは、次元が違う人月単価となります。みなさんが、大手さんに発注して、見積もり金額として提示される金額は、1次請けの金額です。なので、もっとずっと高い金額が見積書として出てきます。




 いまだと、まず、なにもない前提で、見積もりを出す場合は、1人月80万か70万かっていうところのような気がします。

 ただし、実際には、この金額は取れず(見積もり金額を値切られる)、また、設計の人が設計をやるとはかぎらない(プログラマーの料金で、要求仕様から実質すべての開発をさせられるということもあります。この理由は、別のときに、覚えていたら書きます)です。

 てなわけで、実質60万代、それ以下ということもありえますが、でもふつう50万が限界で、これ以下になると、なにか理由があると思います(フリーの人との直接契約とか。そういう場合だと、フリーの人がお金欲しければ、40台、それ以下もありえる)。50万円台以下で、会社が利益をだすのが、大変なはずですから。。。

 なお、最近は、SEとプログラマとかにわけないで、1人月全部60万とかにしちゃうケースも多いです。これは、しごとが、よれよれによれてしまった場合、いろいろとわけると計算が面倒ということで・・・というのは、表向きの理由。

 実は、よれよれになった場合、追加分もあわせ、「トータルでいくら」と発注者側と決めてしまうので、細かく分けられない。



 
 逆に、SEが優秀でも、3次請け(以下で)で100万以上だと、案件に競争力がなくなります。(同じ案件をそれ以下でやってくる人が出てくるとか、それなら、3次に発注せず、社内でやるとか)

 それでも、取れることはあると思うけど。。。

 もちろん100万以上のSEさんっていうのもいるけど、そういう人は、大会社に所属してるとか、有名人とかで、一次請けないしは、二次請けの人のケースか、3次請け以降の場合は、その人以外の人と、調整しているかんじだと思います。




というのが、ウィリアムのいたずらのあくまでも、感触です(=3次請け、4次請け等の開発の末端くらいの人の感触)。

 ほかの人は、ほかのように感じていると思います。とくに一次請け、2次請けのひととは、私たちとは、次元の違う金額をもらっているみたいです(1人月80から100とか、年収500万とか(@_@!))

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

マッチングやディシジョンテーブル(決定表)で、IF文を使わないと再利用/変更/可読性が高くなる

2005-08-21 15:10:22 | 開発ネタ

 昨日のブログで、

全ケースが求まったので、あとは、昨日のブログにかいたtaiohyo[][]に、このデータをいれて、今までの手を入力されたら、対応表にマッチングさせていけばいいんです。


 と書いたのですが、たしかに、マッチング、この方法でもできるんですけど、JAVAの場合、このマッチング部分に、(IF文を使わず)ハッシュマップを使って(Perlの場合連想配列を使って)組むと、もっと簡単で保守性も高いです。というのが今日のおはなし。




 たとえば、昨日の3目ならべの例でいうと、

 今、7-2という手が打たれたとします(コンピューター先手で、7、それに対して2と打った)。次の手を返してください。

 というとき。引数は、String[]で7,2ときた場合、

 昨日の方法だと、その引数と、昨日のブログの下にある、パターンの一覧表を比較します。そして、引数の文字列の最後までが一致したパターンがあったら、パターンのその次の文字を返します。

 例だと、7、2と引数で、受け取った場合、

  7-1-9-2-8:勝ち
  7-1-9-3-8:勝ち
  7-1-9-4-8:勝ち
  7-1-9-5-8:勝ち
  7-1-9-6-8:勝ち
  7-1-9-8-3-2-5:勝ち
  7-1-9-8-3-4-5:勝ち
  7-1-9-8-3-5-6:勝ち
  7-1-9-8-3-6-5:勝ち

ここまでは、パターンが7-1なので、一致せず、

  7-2-9-1-8:勝ち

ここで、7-2となり、一致します。したがって、次の数字、9を返します。




 でも、これって、ループしなきゃなんないので、面倒です。

 そこで、ハッシュマップを使うとべんりっす。

 パターンでは、
 7-1、7-2、7-3、7-4、7-5、7-6の組み合わせでは、9をかえし、7-8、7-9の組み合わせでは、1を返します。

 そこで、このデータを全部持っているHashMap data = new HashMap();というハッシュマップがあったとかんがえ、
 data.put("71","9");
 data.put("72","9");
 data.put("73","9");
 data.put("74","9");
 data.put("75","9");
 data.put("76","9");
 data.put("78","9");
 data.put("79","9");

さらに、7-1-9ときて、相手が2を打ったら8、2でなく3や、4や、5や6を打っても8。。。ですから

data.put("7192","8");
data.put("7193","8");
data.put("7194","8");
data.put("7195","8");
data.put("7196","8");

7-1-9のとき、相手が8と打ったら3で、
data.put("7198","3");

7-1-9-8-3のとき、相手が2と打ったら5です
data.put("719832","5");

同様に、
data.put("719834","5");
data.put("719835","6");
data.put("719836","5");

 7-2についても、同様に登録し、さらに、7-3以下も、同様に登録します。

 この登録は、コンストラクタ内で行うとします。




 そうすると、相手が7-2ときたら、ハッシュマップで、(String)data.get("72");で、"9"という答えが得られます。

 つまり、こういうマッチングでは、マッチングのキーをハッシュマップにいれて、答えを値に入れておくと、聞きたい値をキーにして、そのハッシュマップをgetするだけで、マッチング処理ができます。




 で、これの応用で、決定表(デシジョンテーブル)で、IF文を使わないで表現して、保守性、可読性をあげる方法があります。

 決定表は、
    条件1がY、条件2がY,条件3がYのとき、処理1を行い、
    条件1がY、条件2がY,条件3がNのとき、エラー
    条件1がY、条件2がN,条件3がYのとき、エラー、
    条件1がY、条件2がN,条件3がNのとき、エラー
    条件1がN、条件2がY,条件3がYのとき、処理2を行い、
    条件1がN、条件2がY,条件3がNのとき、エラー
    条件1がN、条件2がN,条件3がYのとき、処理3を行う、
    条件1がN、条件2がN,条件3がNのとき、処理2を行う
のようなことが、きれいな表になって書いてあります。

これを
IF (条件1 == TRUE )
{
   if(条件2 == TRUE )
     :
     :
}
 else
 {
     :
 }

 のようにIF文で書いたら、大変です、IF文のお化けになってしまい、さらに、条件が増えたら、入れ子がふえて、わけわかめになってしまいます。

 さらに、「いや、いままでエラーだったのを、エラーにしないで、処理2を行ってくれ」とかいわれたり、「処理2の一方が、処理4に変わった」とか言われたら、ソースを追っていかないといけないので、大変です。

 でも、これを、条件1、条件2、条件3のYNをつなげて、キーにしてしまい、ハッシュマップにいれてしまうと簡単です。つまり、

data.put("YYY","処理1");
data.put("YYN","エラー");
data.put("YNY","エラー");
data.put("YNN","エラー");
data.put("NYY","処理2");
data.put("NYN","エラー");
data.put("NNY","処理3");
data.put("NNN","処理2");

 としておけば、あとは、条件1、条件2、条件3のYNを引数で受け取って、
 それをつながげれば、OKです。


たとえば、条件1がN,条件2がY、条件3もYであれば、

(String)data.get("NYY");

とやって、"処理2"という結果を得ます。




 こうすると、テストの縮退で、条件を1つだけNにしたものをチェックする形で、テスト項目がへらされても(条件式のチェック(YN)は、チェックしてもらえることになるので)、データをputしたところが、まちがいないか机上デバッグすれば、まあ大丈夫ということになります。

 実際は、ここは、こぴぺするので、間違いは少ないけどね。

 でも、IF文でかいたら、縮退した項目の中に、書き間違いがあるかもしれない!




 で、このやりかたなら、決定表の条件が増えても、さらに決定表でなく、大項目、中項目、小項目が一致したとき、なんとかするでも、条件1がYで、ステータスがある値のときでも、キーをそのように変えればいいだけだから、すぐに変更可能、

 つまり、表形式であらわせるものなら、対応OKだったりします。
 (値をStringでなくVectorにすると、木構造でも対応OKだったりします)

 ということで、保守性や可読性もあがります。




 っていうことで、ハッシュマップ便利。
お気に入りに追加!
 (ちなみに、そのまえのお気に入りに追加した項目は、極上生徒会??)

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

要求を形式化するのが難しいものを、コンピューター化するには(3目並べを例に)

2005-08-20 21:36:29 | 開発ネタ

 JavaやC,COBOLなど、手続きをもとに、組む言語というのは、仕様が言葉で言い表せないといけません。

 しかし、仕様を言い表せない場合は、どうしたらよいでしょうか?

 形式知として、ルールは、ことばで表現できないんだけど、でも、暗黙知として、知っていて、このケースは、こうというのは、表現できる。そういう場合。。。

 条件を全部挙げてしまうという方法で、切り抜けられます。

 その例を今、流行の3目並べでご説明します。




 こんな、お題があるようです(お題は、ここ


問題:コンピュータ対戦3目並べを作れ。
条件:コンピュータが先行になったとき、コンピュータは負けてはいけない。


 3目並べというのは、いわゆる○Xのことだとおもいます。
 9個の升目をかいて、先の人が○、後の人はXをかいて、3つつながったら勝ち! 

 たぶん、出題した人の考え&たいていの人は、この問題を解くには、3目並べの必勝法というルールがあって、そのルールをモデル化すると考えていると思います。
 事実、3目並べの必勝法がわかれば、それが早いです。

 でも、わかんなかったら、どうします?

 この場合、あらゆるケースをしらべ、必勝パターンを打ち込んでしまうというのが、実は、簡単で早いです。。というと、「ありえねー!」と思うでしょう。その人は、たぶん、全部のパターンは、
 9X8X7X6X5X4X3X2x1=362880通り、ありえねー!
と思ったんだと思います。

 でも、違いますよね。

 コンピューターは、自分で手を打つんだから、1とおりに決めちゃえばいいんです。
 その打った手に説明は要らないし、要求はベストの手を打てではなく、負けなきゃいいんです(勝つか引き分けなら)そういう手を1手だけ、示せばいいんです。

 一方、相手の打つ手に関しては、すべて考えないといけないんです!

 つまり、先手の自分(=コンピューター)の側の打つ手、1手目、3手目、5手目、7手目、9手目に関しては、自分の好きな1つの打ち方を示し、
 2,4,6,8手目に関しては、相手の手なので、可能な限りのすべての手について、あげて考えればいいことになります。




 たとえばですね、はじめに、コンピューターが先行なんだから、コンピューターは、左のいちばん下からうつと決めてしまえばいいわけです。

 それで、勝つか引き分けであれば、条件をみたします
 (事実、左のいちばん下からうつと、勝つか引き分けにもっていける)。
 1とおりだけ、きめればいいです。

 9とおり考える必要はありません。

 自分の手は1とおりだけ、決めうちにできます。

 他方、相手は、どうやって打ってくるか、わかりません。

 なので、のこりの
   9とおり-(左の一番下)=8通りについてかんがえないといけません。

 結果として、考える数は

 1X8X1X6X1X4X1X2X1=384とおり

 で、さらに、途中で勝っちゃったら、もう、その先は考えないで良いわけです。
 そうすると、考えるのは、300以下となり。。。
 なら、全ケースあげちゃったほうが早い!ということになります。

 たしかに、おばかな方法なんですけどね。。。
 でも、実務的には、このおばかな方法が、とても重宝します。




 ということで、全ケースについて、考えた方法は、こちら!

 その結果、この今日のブログの終わりに上げる結果になります。

 というふうに、全ケースが求まったので、あとは、昨日のブログにかいた taiohyo[][]に、このデータをいれて、今までの手を入力されたら、対応表にマッチングさせていけばいいんです。

 で、具体的に、この話をjavaで組むには&この話をもっと汎用的にして、開発の場で、いったいどうやって使っているのかについては、またこんど、覚えていたら書きます。きょうは、長くなった&もう、帰らないといけないので、この辺で。




3目ならべ、自分が先行のとき、勝つか引き分けにするパターンのすべては、以下のとおり

123
456
789

という順番で、考えてます。

  7-1-9-2-8:勝ち
  7-1-9-3-8:勝ち
  7-1-9-4-8:勝ち
  7-1-9-5-8:勝ち
  7-1-9-6-8:勝ち
  7-1-9-8-3-2-5:勝ち
  7-1-9-8-3-4-5:勝ち
  7-1-9-8-3-5-6:勝ち
  7-1-9-8-3-6-5:勝ち
  7-2-9-1-8:勝ち
  7-2-9-3-8:勝ち
  7-2-9-4-8:勝ち
  7-2-9-5-8:勝ち
  7-2-9-6-8:勝ち
  7-2-9-8-5-1-3:勝ち
  7-2-9-8-5-3-3:勝ち
  7-2-9-8-5-4-1:勝ち
  7-2-9-8-5-6-3:勝ち
  7-3-9-1-8:勝ち
  7-3-9-2-8:勝ち
  7-3-9-4-8:勝ち
  7-3-9-5-8:勝ち
  7-3-9-6-8:勝ち
  7-3-9-8-1-2-5:勝ち
  7-3-9-8-1-4-5:勝ち
  7-3-9-8-1-5-4:勝ち
  7-3-9-8-1-6-5:勝ち
  7-4-9-1-8:勝ち
  7-4-9-2-8:勝ち
  7-4-9-3-8:勝ち
  7-4-9-5-8:勝ち
  7-4-9-6-8:勝ち
  7-4-9-8-3-1-6:勝ち
  7-4-9-8-3-2-6:勝ち
  7-4-9-8-3-5-6:勝ち
  7-4-9-8-3-6-5:勝ち
  7-5-9-1-8:勝ち
  7-5-9-2-8:勝ち
  7-5-9-3-8:勝ち
  7-5-9-4-8:勝ち
  7-5-9-6-8:勝ち
  7-5-9-8-2-1-3-4-6:勝ち
  7-5-9-8-2-1-3-6-4:ひきわけ
  7-5-9-8-2-3-1-4-6:ひきわけ
  7-5-9-8-2-3-1-6-4:勝ち
  7-5-9-8-2-4-6-1-3:勝ち
  7-5-9-8-2-4-6-3-1:ひきわけ
  7-5-9-8-2-4-6-1-3:ひきわけ
  7-5-9-8-2-4-6-3-1:勝ち
  7-6-9-1-8:勝ち
  7-6-9-2-8:勝ち
  7-6-9-3-8:勝ち
  7-6-9-4-8:勝ち
  7-6-9-5-8:勝ち
  7-6-9-8-1-2-5:勝ち
  7-6-9-8-1-3-5:勝ち
  7-6-9-8-1-4-5:勝ち
  7-6-9-8-1-5-4:勝ち
  7-8-1-2-4:勝ち
  7-8-1-3-4:勝ち
  7-8-1-5-4:勝ち
  7-8-1-6-4:勝ち
  7-8-1-9-4:勝ち
  7-8-1-4-3-2-5:勝ち
  7-8-1-4-3-5-2:勝ち
  7-8-1-4-3-6-5:勝ち
  7-8-1-4-3-9-5:勝ち
  7-9-1-2-4:勝ち
  7-9-1-3-4:勝ち
  7-9-1-5-4:勝ち
  7-9-1-6-4:勝ち
  7-9-1-8-4:勝ち
  7-9-1-4-3-2-5:勝ち
  7-9-1-4-3-5-2:勝ち
  7-9-1-4-3-6-5:勝ち
  7-9-1-4-3-8-5:勝ち

1手目、3手目、5手目、7手目、9手目に関しては、自分(=コンピューター)の側なので、自分の好きな1手、2,4,6,8手目に関しては、相手の手なので、可能な限りのすべての手について、あげています。
 

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

コピーされるほど儲かるシステムと同じ考え方の、インディーズのプロモーションサイト

2005-08-19 21:05:33 | コピーされるほど儲かるシステム!

たぶん、この「コピーされるほど儲かるシステム」と同じ考え方の、「DRMなしの楽曲でプロモーションする」というニュースがあったので、メモ(いま、いそがしくてよめないので)
元SME社長の丸山氏、DRMなしの楽曲でインディーズをプロモーション

で、そのニュースに関連URLとして、のっていたもの

mF247
http://mf247.jp/

丸山茂雄の音楽予想
http://d.hatena.ne.jp/marusan55/




ついでに、「東芝EMI、「セキュアCD」導入」のニュースはここ


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

Winnyのファイル交換は、公職選挙法142条・143条の「文書図画の頒布」にあたるのか?

2005-08-19 19:26:53 | Weblog

選挙の季節ですね。
公職選挙法では、インターネットでの選挙運動の規制があるようですが(たとえばここ

 うーん。。。よくわからん!
 ネットラジオは、放送にあたるの、あたらないの?
 ライブドアニュースの動画は、放送にあたるの、あたらないの?

 さらによくわからないのは、Winnyなどのファイル交換ソフトで、かりに、選挙候補者のビラのPDFファイルなんかが、交換されてしまった場合は、どうなるの?

 そのファイルを、交換しようとして、交換したんじゃないからOK?

 でも、交換されちゃったんだからアウト?

 Winnyって、まさに、「文書図画の頒布」のためのソフトだよねえ、で、そのWinnyで共有できるところに、ファイルを置いちゃったら、それは、頒布?

 でも、うっかり、そうなっていたとしたら、頒布する意図は、なかったんだよねえ。。そういうときは、どーなのどーなの??

 うーん、よーわからん。

 まあ、選挙に出馬しないし、選挙関係のお仕事も来ないと思うので、かんけーないけどね!


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

ロジックをデータにしちゃうと、システムは変更&保守&再利用しやすいよ!

2005-08-19 18:13:04 | 開発ネタ

 変更しやすいプログラムについて、いろいろ出てたので
(たとえば、こことかここ)、その話に便乗して、ものすごい唐突なんだけど&よく知られてることかもしんないけど、ロジックをデータで書くと、プログラム?は、変更しやすいよね!というお話。




 もともとは、形式知として、形にはなっていない業務ロジックや、ものすごーい難しい業務手順なんだけど、全部のケースをあげて、どうやるかを示すことは簡単ときなんかに使う方法なんだけど。。。

 たとえば、大項目、中項目、小項目がある。
 大項目は、1,2,3,4,5
 中項目は、A,B,C
 小項目は、い、ろ、は、に
 がとりえる。

 大項目1の場合は、中項目B(小項目にかかわらず)、
          または中項目Cで小項目ろ、はのとき、業務1を行い
 大項目2、3の場合は、中項目C(小項目にかかわらず)、
          または中項目Aで小項目ろ、はのとき、業務1を行い
 大項目4の場合は、中項目A(小項目にかかわらず)のとき、業務2を行う

とかある場合、これを、
if ( daikoumoku == 1 )
{
   if ( tyuukoumoku == B)
   {
      :
      :
とか、かいてたら、ちょっと、この条件がかわっただけで、プログラムを
修正しないといけないよね。

そこで、データを
String taiohyo[][] =
{
    {"1","A","あ",""},
       :
       中略
    {"1","B","あ","業務1"},
    {"1","B","い","業務1"},
       :
};

のように、全部の大項目、中項目、小項目と、そのとき、行う業務の配列をもっておいて(実務上では、ファイルやDBに入れることも多いけど、いや、そっちのほうが多いな)、
String yarukoto(String dai,String tyu,String sho)
{

     //チェックとかは、省略してるのだ!!

       for(int i = 0 ; i <taiohyo.length ; i ++)           if ( ( dai.equals(taiohyo[i][0]) == TRUE ) &&
             ( tyu.equals(taiohyo[i][1]) == TRUE ) &&
             ( sho.equals(taiohyo[i][2]) == TRUE ) )
             {
                 return taiohyo[i][3];
             }
       }

       return ""; // 何も定義ないとき
     }

とかいうメソッドをつくっておくと、このプログラムには、どんなとき、なにをするという定義がないので、大項目、中項目、小項目に応じて、やることが変化したとしても、上記のtaiohyoっていう配列をなおすだけでいい。

 そして、実際には、対応表の内容は、Excelファイルにかいておくので、そいつをこぴぺするか、VBAで自動生成するってなかんじ。

 こういうふうに、ロジックをデータ側に追い出すことによって、汎用性をもたせ、変更しやすくするっていうのは、とてもよく使われている。

 たとえば、流通システム開発センターのビジネス・プロセス・モデルとか、DTPの方面では、Adobeのジョブチケットと、その流れを汲む。。なんだっけ(^^;)(DTPエキスパート更新の提出をするときは、おぼえてたんだけどな)とかなんかでも、ファイルやDBに、つぎのジョブ(ビジネスプロセス)を定義し、それを読み込むという形で、使われてるよね。





 で、なんで、こんな話をするかというと、後日わかるかもしれない(書くことを覚えていれば)


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

教養が伺えるメールって、どんなのだろう??

2005-08-18 21:33:50 | Weblog

FPNの「コンサルタント選びの難しさ」というところ(ここ)に、こんな言葉がありました。


メールから教養が伺えない人間


メールから、教養が伺える。。。どういうのだろう。

まず、拝啓 時下ますます。。。と書いてはいけない?
ちゃんと今なら立秋の候とかになるのかなあ。。

あ、暦の上では、もう秋じゃん!残暑見舞いもかいてない。。。

で、それはそうと、じゃん!なんて、つかってはいけない。

うーん、どーいうメールが教養あるメールなんだろう。




 そういえば、昔、「見知らぬ人にたいしてメールをだすとき」 拝啓とか、時候の挨拶はいるのかどうか?というのが話題になったことがある。

 必要ない!という意見が大半だったけど(メールはそういう文化だという理由で)、ウィリアムのいたずらは、念のためにつけている。

理由:
 知らない人が、メール文化にいた場合。
 →拝啓とつけても、「こいつばか!?」と思って、見下されて、軽蔑されるだけ
 :怒られて取引中止になる可能性は低い

 知らない人が、手紙文化にいた場合
 →拝啓とつけないと、「失礼なやつ」と思って、怒り出したり、出入り禁止になる
  危険性は、否定できない。

 つまり、馬鹿にされたりするのはまあ、しかたないものとして、取引上、怒らせて不利になる危険は?というと、つけないほうのほうが、高い気がするからです。




 それはそうと、教養のあるメールとは?どんなんだろう。。。

 うーん、考えてもわからない

   =ウィリアムのいたずらに教養がないから!?

   =たしかに(^^;)



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

Skype Conference 2005というのがあるらしい

2005-08-18 15:44:59 | Weblog
くわしくはここ

2005年9月3日(土) 10:00~17:20 電通大


本イベントでの発表や議論の内容について、新聞、雑誌、テレビ、Webサイト、blog等のメディアで公開する際には、必ず発表者に対して記事の内容について確認を求め、公開についての許諾を得るようにしてください


 つーことだそうなので、内容を知りたければ、いくしかないのかなあ。。

 でも、めんどーだ(^^;)

 どーしよーかなー??




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