大学祭

ちょっと時間が前後しますが大学時代の話です。

コンピュータ医療研究会として、学園祭に出展したことがあります。ちょうど今の時期だったでしょうか。

入部した段階で潰れかけの部だったのですが、華やかなりし頃には学園祭で「占いプログラム」を出店していたらしいです。占いというと生年月日や血液型などを入力させるわけですが、太古の時代には女性の場合に住所や電話番号まで入力させて、占い(とそれ以外のこと)に利用していたという伝説がありますが本当かどうか・・・

Windowsの開発をしていたおかげで、簡単なユーザーインターフェースとプリンタ周りのコードはすぐに出来ますので、お小遣い稼ぎ(と新たな出会い?)のため出店しました。

生年月日、星座を入力してもらい、占いの文章が表示された紙を印刷します。基本的に真面目に何かを計算するわけではなく、ある意味乱数のようなので文章を作っていきます。

あなたは{
 1.本当は引っ込み思案なのに無理に周囲に合わせている 
 2.自分の中の積極的な部分を出せずにいる 
 3.・・・・
}ですが、・・・

などと文章のテンプレートと、可変部分があり、可変部分を乱数で選んでいきます。最後に、

あなたと相性のいい男性は、・・・・です

という文面が出て、ここには12星座x4つの血液型、の48パターンについて、乱数で合うか合わないかを計算して表示します。

for_each( i in Holoscope){
 for_each( j in Blood_type){
  if(rand() > 0.9) printf( "%s 座の%s型”, i,j);
}}

というコードになるでしょうか。各パターンとの相性が合う確率は10%ですが48パターンあるので普通は5パターンほどが「相性がいい」とされます。

ここで、このようなプログラムを組むに当たり、再現性が必要になります。2回、同じデータを入れて再現性がないのは困ります。これは簡単で、生年月日、血液型をランダムシードとして利用すればいいのです。

普通にライブラリの乱数関数を使えばいいのですが、乱数関数の中身が変わったときに結果が変わるのもイヤかなと思いました。乱数を生成するアルゴリズムいくらでもあるのですが、そのころカオスアトラクターなどに凝っていまして、

f(x)  =  4(x - x^2)

という関数が[0,1]でカオス的な振る舞いをする(数列のように、次々に値を代入していくと予測不能な値の変化をする)ということを知ったばかりでしたので、乱数生成に利用しました。

こうして、学園祭を迎えたところ、ある時に印刷された結果について質問を受けました。

「あなたと相性のいい男性は、です。」としか印刷されていません!

・・・つまり、この人は10%は当たるはずの乱数を、48回くぐりぬけたわけです。1%もないはずですが、高校生の対数の計算には好都合な練習問題でしょうか。

よく考えると、僕が採用したカオス乱数の系列は、0に非常に近い値が来るとしばらくその状態から抜け出せなくなります。なので、偏った結果が出てもおかしくないのかもしれません。

さてそのようなクレーム?を受けて、その場でソースコードを修正しました。どのように修正したかって?簡単な解決法です。どのような状態でも「射手座のO型」は相性のいい相手として無条件に表示するようにしました。これで、少なくとも相性のいい相手が全く表示されないということはなくなりますし、射手座のO型にとっては恋愛のいいとっかかりができることになります・・・実際はそう甘くありませんでした。

ちなみに、そのプログラムは内部的にですが”Uranus.exe”という名前になっていました。占いシステム、というのと惑星の名前にかけたつもりだったのですが。このネーミングセンスが結局HenPitsu(のネーミング)につながることになります。

卒業してから・・

大学を卒業して就職?してからはプログラムを組むことから縁が切れたかというと、コンピュータ医療研究会のつてで胸のレントゲンのデータベースプログラムを作る仕事を請負いました。呼吸器内科の先生方(大御所の先生で自分の父親と同じか上の年齢です)の要望を聞きながら、会議の形式でなんども集まりながら仕様が煮詰まっていきました。項目がかなりフレキシブルなことと、画像や可変長データを扱うことから、普通ならAccessやFilemakerを使うのでしょうが、自前のプログラムを組みました(そのほうが配布・販売しやすいこともあり)。Windows上で、Visual-C++4.0あたりを使っていたと思います。当時はWin95の時代でした。FIS4WINはWindows3.1向けに組んでいたので、プログラムはずいぶん楽になりました。

プログラムの構成はそんなに大変ではなかったですが、データ入力フォームのレイアウトを直したりとかが大変でした。いまならインターフェースはHTMLで書いてブラウザに任せてしまうところでしょうね。プログラムを組む上では、あまりchallengingなことはありませんでした。CD-ROMのソフトでしたが、このころには自分でCD-Rを所有するようになっていましたので、昔に比べれば楽になったものでした(が、ハードディスクの容量は500MB以下だったはずです)。

結局このソフトはRespiro-naviという名前で発売されました。1998年頃だったかと思います。なお、当時は医療界ではMacの方が人気があり、そちらでも出して欲しいという要望があったのですが、対応できませんでした。

いまはVer.2が別の会社から出ていますが(2006年発売)、僕はこれにはタッチしていません。忙しくなって参加できなくなったからですが、専門のプログラマが作ったと思うのでいいものができたのではないでしょうか。Ver.1はどれだけ売れたのでしょうか・・・バグフィックスも余りやらずにつくり逃げのような感じになってしまいました(毎度か?)

Facebook

Facebookをはじめました。

しばらくご無沙汰していた高校、大学の同級生と連絡が取れました。

FIS4WINの項でちょっと触れましたが、当時一緒にソフトを開発した後輩のK君と、ずっと連絡が取れていなかったのでどうしているのかなと気になっていました。昨日ふと思い立って検索したところ、なんとアメリカにいてGoogleでsoftware engineerとして働いているとのことでした・・・1995年の当時はEffective C++をみんなで読んだりしながら勉強していたことを思うと、ずいぶん違う道に進んだものだなと思います。

自分がsoftware engineerになれたかどうか考えてみると、自分の書くコードはとりあえず動けばいい的な、プロとしての品質には達しないような気がしています・・・昔もバグを量産したものでした。

さてFacebookで友達が増えたところで、どう活用すればいいのかまだよくわかりません。飲み会の告知などはしやすいようですが・・

HenPitsuどこまで更新するか

また1ヶ月間くらい更新をサボっていました。

暇なときにプログラムを更新、と言うつもりでブログのタイトルを決めましたが、更新するくらいの暇な状態がやってきません。

筆先のパラメータ更新で、筆先が丸くなりやすいとの意見には対応できそうです。画面の回転に対する指摘(横画面でも、縦で保存される)というのも、対応は可能です。

拡大縮小は、出来なくないけれども元々のと比べてレスポンスが遅くなりそうで今のところ考えていません。

Twitterへの投稿機能はつけてもいいとおもいますが、どれくらいの必要性があるのか・・・?

ということで、1ヶ月以内くらいで更新予定ですが、革命的なほどのものにはならないと思ってください。ご希望があればお答えしたいですが・・・