2015年12月31日木曜日

今年の終わりに

 2015年の1月から再開したコラム執筆も1年が経ちました。途中、出張等で不定期になったりもしましたが、そういうところは大目に見てください。何事も継続するのは大変なんです。

 少数の読者の皆様、ありがとうございました。私はひねた性格なので、「表示回数が増えても、どうせ実際は読んでいないんだろう。」とか考えていますが、興味を持ってくれた方が一人でもいるというのはうれしい限りです。

 ちなみに、表示回数が一番多いのは、以前に書いたのど自慢の予選会を見に行った話です。確かに検索する人が多そうです。

 意外に多かったのは「エウレカ」というタイトルで書いた数学の話です。一人の人が何度も見た、というわけではなさそうなので、この内容に興味がある人が複数人いたのでしょう。かなりマニアックな内容だと思うのですが、世の中には変な人がいるものです。人のことは言えませんが。

 「少しロマンチックな数学の話」は、そこそこ面白いと思っています。表示回数もちょっと多めで、うれしいです。

 私が好きなMatchbox Twenty関係の内容を何回か書いたのですが、全然読まれてないです。さらに言うと、最初の方の投稿にはプロフィールが書いてあるのですが、これも全然読まれてないです。思いは伝わらないものです。orz
 (なお、Matchbox Twentyの内容は、2015/3/8です。興味を持ってくれる方は、Youtubeで検索してくみてください。)


 こうやってコラムを書いていると、毎週連載するのが、いかに大変かが実感できます。週刊誌の漫画家さん達は本当に偉いと思います。

 目的の一つである作文の練習は、まだまだ継続するつもりですが、毎週の執筆は負担が多いので、来年は減らすつもりです。悪しからず。


それでは皆様、良いお年を。

さよなら、さよなら・・・さよなら。

2015年12月20日日曜日

地上の星に憧れて

 昔、NHKで放映していたプロジェクトXが好きでした。プロジェクトを成功させるため懸命に戦う技術者たちを尊敬していました。

 オリンピックで金メダルを獲るとか、ノーベル賞を獲るとか、そういう特別な業績を残すのは一握りの人々です。目標とするにはハードルが高い世界です。ですが、技術者として懸命に働きプロジェクトを成功させるというのは、目標としてそれほど現実離れしていないと思っていました。

 だから、私は、「懸命に働き、何かのプロジェクトを成功させる」、という目標を持って、今の仕事を選びました。

 会社に入って、一応、技術者として仕事をしていて分かったのは、プロジェクトを成功させるために懸命に戦う人が思ったより少ないということです。

 かつての偉大な技術者達は、昼夜を問わず実験に明け暮れていました。近頃は、36協定とか、労働基準法の規制があるため、長時間勤務は会社に禁止されています。(建て前ですが)

 かつての偉大な技術者達は、大学に押しかけてでも、技術を必死に勉強していました。現在は、インターネットでいくらでも情報が得られる割に、勉強不足の人がいます。(私もまだまだ未熟ですが)

 かつての情熱的な技術者たちの仕事ぶりを基準に考えていると、周囲に温度差を感じることが多々あります。昔は良かったとか、自分以外の誰かが悪いといったことを言うつもりはありません。それはカッコ悪いので。
 私はただ、少しくらい輝いてみたいという一心で、日々、仕事をしています。


2015年12月13日日曜日

「やるべきこと」と「できること」

 インターネットでニュースを見ていたら、COP21の話がでていました。地球温暖化の対策として、CO2の排出規制をするといった話でしょう。そういえば、京都議定書が締結されたのは、1997年のことなので、それからずいぶん経ちます。今後もこうした議論は続いていくのでしょう。

 温暖化を防止するために、地球の環境を人間のエゴで破壊しないために、対策を行う、というのはやるべきことだと思います。ですが、「やるべきこと」と「できること」は違います。

 どんなに「やるべきこと」でも、実際には「できないこと」もあります。「やるべきこと」を延々と議論しているだけでは意味がありません。「できること」を、少しずつでも、実行していくことに意味があります。

 話は変わりますが、日本の財政再建もやるべきことです。異常な借金状態から脱却しないといけません。「やるべきこと」なのは明白ですが、何が「できること」なのかは難しい問題です。

 たいていの場合、何ができるかを理解しているのは、現場の人間です。現場を知らない人間は「やるべきこと」を議論して、現場の人間は「できること」をやります。「やるべきこと」を議論している人間は、往々にして、机上の空論に走ります。「できること」をやる人間は、そういった無理な空論に振り回されることがしばしばです。
 (私は、どんなことでも現場の意見を尊重すべきだと思っています。だからこそ、自分が現場にいないのであれば、あまり口をはさむべきではないとは思っています。)

 最近、会社で「これはやるべきことだから、やろう」という発言をする人がいました。現場を見ないでそういう発言をする人が社会にはよくいると思います。非難する気はありませんが、私自身は現場で「できること」をやる人間でいたいと思っています。


 というわけで、私は今日もエアコンを切って、節電に務めています。できることから一歩ずつ。


参考:京都議定書

2015年12月6日日曜日

自分の気持ちを考える

 人の気持ちというのは分からないものです。他人の気持ちが分からないという話はよくありますが、私が思うに、自分の気持ちもよく分からないものです。

 おなかが空いたときに目の前にアンパンとクリームパンがあったとして、自分はどちらを食べたい気持ちなのでしょうか? 「アンパン食べたい度」が70で、「クリームパン食べたい度」が50、といったように数値化できれば簡単ですが、そうはいきません。さんざん迷ってからアンパンを一口食べたら、やっぱりクリームパンにすれば良かったなんて後悔したり。

 気持ちというのはころころ変わってしまうものです。仮にある瞬間の気持ちを脳波かなんかで測定しても、次の瞬間に変わってしまうのであれば、測定に意味がありません。物理学的には測定できないものは存在しないのと同じです。気持ちと言うのは、定量化できない、よく分からないものです。

 ちなみに、私はこの例えをアンパン・クリームパン問題と呼んでいます。(^o^)


 自分の気持ちですら分からないのだから、他人の気持ちが分からないのは当然です。「他人の気持ちが分からない」と言って悩むのは時間の無駄なので止めましょう。


 気持ちというのは、よく分からないものなのですが、人間の行動はなんだかんだで気持ちに左右されます。だからこそ、相手の気持ちを考えるというのは大事なことです。同様に、自分の気持ちについても、よく分からないものなのだから、それを考えるというのは大事なことだと思います。

 自分の気持ちを考えるというのは、「自分を客観的に見る」ということです。自分を他人化して、「どこかの誰かが自分の状況だったら、どのような気持ちになるか」を考えるということです。

 例えば、サラリーマンが上司から「君はどうすれば役に立つんだろう?」なんて言われたら、どう思うでしょうか?
 自分がそう言われたときに、自分ではない誰かがそう言われたらどう思うか? 上司はどう思ってそう言ったか? 冷静にかつ客観的に状況を分析するために、自分を他人化して気持ちを考えるというのは、一つのやり方だと思います。

 なお、私がこれを言われたのはずいぶん前です。私には、さぼっている気はなかったのですが、上司から見ると役に立っていなかったのでしょう。このとき、自分がどういう気持ちになっているべきだったのかは、今でも分かりません。


 以上、「自分を他人化する」という言葉を、ふと考えたので、今回はそんなコラムを書いてみました。








2015年11月29日日曜日

賽の河原

 賽の河原とは、死者が石を積んでは鬼が崩すというのが繰り返される場所です。(仏教は専門外なので、間違っていたらごめんなさい。)

 会社員をやっていると、会社の中で無駄な仕事を増やそうとする人をよく見かけます。意味のない仕事を増やして、「忙しい、忙しい」と言うような人です。本人だけならまだしも、周囲の人に余計な仕事を作ってふりまく迷惑人もいます。そして、たいていの場合、本人はそれが無駄な仕事だと思っていません。

 実際は、無駄ではないのかもしれませんが、結果がでなかったり、本当にやるべき仕事を妨げてしまったりするのでは、無駄な仕事と言わざるを得ません。日本の労働生産性の低さの理由の一つはこれだと、私は思っています。

 無駄な仕事は簡単に増やすことが出来ます。まさに、石を積んでは崩すのと同じです。無駄な仕事を延々やらされて、結局、成果が得られないのでは、地獄そのものです。


 私自身、無駄な仕事をしてしまうこともあると思うので、他人のことを悪く言う気はありません。ですが、「無駄な仕事は簡単に増やせて、価値ある仕事の妨げになりうる」ということだけは注意していたいと思っています。
 願わくば、付加価値の高い仕事をしていたいものです。

2015年11月22日日曜日

多欲と分散

 ビジネスにおいて「選択と集中」は重要なことです。みんながそう言っています。みんなが言っているということは、みんなできていないということです。なぜでしょうか?

 あなたがある部署のリーダーになったとします。部署には10のプロジェクトがあります。各プロジェクトには5名程度の人員がいます。あなたはプロジェクトの数を減らせるでしょうか? 少し想像してみましょう。

 たいていのプロジェクトには成功するまでの計画があります。当然、成功するための計画なので、成功して利益を出すことがゴールになっています。つまり計画だけ見ていると、どのプロジェクトも成功してしまうので、「選択と集中」はできません。

 プロジェクトには往々にして「やってみないと分からないこと」があります。どんなプロジェクトも予想外のトラブルで失敗することが起こり得ます。ですが、「このプロジェクトは失敗するかもしれないから、念のため、別のプロジェクトも進めよう」なんて欲張っていると、やっぱり「選択と集中」はできません。

 また、プロジェクトに関わっている人々は、プロジェクトを成功させるために、それなりに努力しています。その人々にあなたはプロジェクトの終了を宣告できるでしょうか? 感情論ですが、せっかくの努力を否定するのはつらいことです。

 「選択と集中」を実践するのは難しいです。


 少し話が変わりますが、日本のサラリーマンは労働生産性が低いと言われています。労働時間が長い割りに、成果が少ないということです。これも「選択と集中」ができていないということだと思います。

 上司からは「あれをやれ、これをやれ」なんて仕事がたくさん降ってきます。本当にやるべき仕事に集中しないと、仕事は増える一方です。上司に「その仕事は無駄です」なんて言うのは、なかなか大変です。

 「選択と集中」を実践するのは難しいです。


 「選択と集中」ができないというのは、「欲張っていろいろなことに手を出している」ということだと思います。欲張って戦力を分散させていると、高確率で失敗します。

 要は、「二兎追うものは一兎も追えず」ということです。

2015年11月14日土曜日

フリーランスになれるか?

 私はただのサラリーマンです。会社に行って、お仕事をして、給料をもらっている身分です。
 で、ふと思ったのですが、もし何かの理由で会社が無くなったとして、私は生活できるでしょうか?

 選択肢はいくつかあります。
 同じ業界の会社に再就職するというのが普通でしょう。アルバイトで生計を立てるという手もあります。どちらにしろ、どこかの組織に所属すれば、今と同じように給料が得られるでしょう。
 では、私は、組織に所属しないフリーランスとして生きていくことはできるでしょうか?
 (なお、デイトレーダーとかギャンブルとかは、なんとなく好きになれないので遠慮します。)

 フリーランスで生計を立てるには、スキルやコネが必要です。例えば、ソフトウェアを作って商売をするとしたら、ソフトウェアを作る技術とそれを売る手段が必要です。開発、製造、営業、総務、財務といった、一つの会社が行っている業務をすべて一人でやるということです。今の私にはかなり難しいでしょう。技術系の仕事を専門としている私は、法律や会計の素人です。財務を外部委託するといった手もありますが、それでも知識は必要です。私はまだまだ勉強不足のようです。

 最近、日々の業務に追われて勉強がおろそかになっていたのですが、「もっと広い視野で勉強しなくては」と、ふと思った次第です。

2015年11月7日土曜日

かたく結びタイ

 ここ数カ月、革靴の靴ひもが ほどけやすくて困っていました。1km 歩くたびに締め直すといった有様で、さすがに何とかしたいと思っていました。

 調べてみると、ほどけにくい結び方があるとのことで、早速 試してみたところ、イアン・ノットではまだダメでしたが、イアン・セキュア・ノットにしたらほどけなくなりました。

 たかが 靴ひも とは言っても、いろいろ結び方があるものだと感心しています。お手軽なので、ぜひお試しあれ。
 (ちなみに、私が今はいているジャージのズボンは、イアン・ノットにしています (^o^) )


 靴ひもと言えば、私は 昔 靴ひもに悩んでいて 笑われたことがあります。

 靴に紐を通す方法は1通りではありません。片側に4つ、計8つの穴があるとして、紐のどちらの端を通すか、上下どちらから通すか、の組み合わせは非常に多いです(8! x 2^8 x 2^8)。見た目の美しさ、実用性などを考えると、複雑な問題だと私は思うのですが、「変なことで悩んでいる」と思われたみたいです。orz

 靴ひもを気に掛けることはあまりないと思いますが、そういうところを気にしてみるのも 遊び心があって面白いと思います。
 お出かけ前に少し気にしてみてはいかがでしょう?


参考:ほどけない結び方靴ひもの結び方

2015年11月1日日曜日

嫌われたくない症候群

 嫌われたくない症候群とは、他人に嫌われることを極度に恐れる心理のことです。八方美人とは、周囲の人にいい顔ばかりすることです。

 ウェブで調べてみると、嫌われたくない症候群も八方美人もストレスをためるとか、疲労するといったようなことが書いてありました。

 私も、基本的には、周囲の人から「いい人」と思われるようにしていますが、さすがに、自分の負担になるほどのことはしません。常に他人の意見に賛成するわけではなく、間違っていると思ったら、きちんと言います。
 (なお、周囲の人が私を「いい人」と評価しているかどうかはマチマチだと思うので、悪しからず。)

 周囲の意見に流されてばかりでは、むしろ嫌われます。嫌われるのを恐れて、おどおどしている人は、むしろ嫌われます。それでは本末転倒です。

 過度に他人に迎合することなく、それでいて不快に思われないように礼儀を重んじる。そういうスタンスが良いと思っています。

 普通の人は、いろんな人にお世話になっているものです。歩いていて道を譲ってくれた人、コンビニでレジを打ってくれた人。ささいなことに対しても、少しだけ感謝をこめて、丁寧に接していたいと、私は思っています。



 どんな人にも丁寧に接するというのは、どんな人にも同程度にしか興味がない、ということかもしれません。たぶん、私は他人にあまり興味がありません。そう思うと時々寂しくなります。
 ・・・秋だからかなぁ。



参考:嫌われたくない症候群八方美人

2015年10月25日日曜日

学校教育の価値

 長年、学校教育を受けてきた身として、教育問題には興味があります。日本人だと小中高の12年間、学校教育を受けた方も多いと思いますが、学校教育にはどれくらい価値があるのでしょうか?

 アインシュタインと同じ教育を受けた人はアインシュタインのようになるでしょうか?

 たぶん、ならないでしょう。天才と呼ばれる人は、それほど大勢いません。そして、教育で天才が生み出されるなんて話は聞いたことがありません。

 かの天才ガロアが受験に失敗した話は有名です。ガロアが偉業を成し遂げたのは、独学したからです。「自ら徹底的に勉強した者のみが、偉業を成し遂げる可能性がある」と私は思います。ちなみに、ガロアに読むべき数学の本を教えたのは、学校の先生とのことです。

 日本は教育水準が高く、識字率も高いと言われています。おそらく本当でしょう。学校教育が役に立っているというのも本当でしょう。

 ただ、少なくとも学校教育を受けているだけでは、天才にはなれません。天才を目指すためには、独学が必要です。それは認識しておくべきことだと思います。たとえ天才になれないとしても、自ら学ぶ能力は必ず役に立つ能力だと思います。

 学生時代にそのことに気付いていたら、もっと勉強したのに・・・ と、言いたい気もしますが、そんなことを言っても始まらないので、日々の勉学に励みたいと思う次第です。

2015年10月18日日曜日

物理屋さん

 私は、生息数が減っているといわれている「物理屋さん」です。
 細かいことを言うと、理学部の物理ではなく、工学部の物理なので、少し応用よりです。

 というわけで、たまには、とことん物理ネタを書きたいと思います。なお、普通の教科書に載っているようなことを書く気はないので、悪しからず。

 そもそも物理学とは、「自然を測定し、測定した数値を数学を使って解析する」学問です。
 「自然科学は全部そうだろ!」と言われるとその通りですが、物理学は他の自然科学よりも、「測定する」ことに重きを置いていると思います。温度計を作る人は、たいてい化学者でも生物学者でもなく物理学者です。

 自然科学に測定は必須で、測定器は物理学者が作るのだから、物理学は自然科学のベースと言えます。これを物理学者の手前味噌と言います。なんちゃって。

 せっかくなので、温度計について考えてみます。

 昔からある温度計と言えば、水銀温度計です。熱膨張、つまり水銀の体積が温度で変化することを利用して温度を測定します。

 電気的な方法で温度を測定できると、電子機器にとっては便利です。ということで、抵抗式の温度計なんかはよく利用されます。電気抵抗が温度で変化するということを利用して温度を測定しています。

 輻射を利用した体温計というのもあります。人体から放出される赤外線のスペクトルが温度に依存するということを利用して温度を測定しています。


 と、既存の温度計の話をしてもつまらないので、変な温度計を考えてみます。


 例えば、アクリル板の屈折率は温度に依存します。アクリル製のプリズムにレーザー光を当てたとき、その曲がり方は屈折率に依存します。ということは、曲がり方を調べれば、温度が測定できるはずです。(参考)

 金属の弾性率は温度に依存します。温度が高いと柔らかくなります。ということは、ばねの強さを測定すれば、温度が測定できます。(参考)
 極論すれば、電車に乗っているときに、その振動を解析すれば、その日の気温が分かるはずです。できると思った方は、ぜひ挑戦してみてください。(^o^)

 コーヒーの中にミルクを一滴たらすと、ミルクは拡散します。このときの拡散の仕方は温度に依存します。ということは、コーヒーに入れたミルクを観察すれば温度が測定できます。コーヒーの温度が高いほどミルクは早く拡散しているはずです。(参考)
 拡散の様子を調べて温度を測定するなんて面倒に思えますが、極低温の温度測定では同様の現象が利用されています。私は、学生の頃、この話を聞いて感動しました。

 クッキーを焼いたときのサクサク感は、オーブンの温度に依存するはずです。ということは、クッキーを食べたときのサクサク音を録音して解析すれば、オーブンの温度が分かるはずです。
 もちろん、クッキーのサクサク感は生地にも依存するので、温度とサクサク音が1対1に対応するように、焼き方を決めないといけません。このような作業を「校正」と言います。どんな測定器でも校正は必要です。
 まぁ、「クッキーを焼くために温度を測る人」はいても、「温度を測るためにクッキーを焼く人」はいないと思いますが。


 下らないことを書いていたら長くなってしまいました。orz

 大事なことは、「物理学は、まず測定に始まる」ということです。かのガリレオだって、心拍数を使って振り子の振動周期を測定していました。

 本来なら、データを測定したら、数学を使った解析が続きます。ですが、長くなりそうなので、またいつか、気が向いたときにします。


 物理学も他の学問と同様に細分化されています。力学、熱力学、電磁気学などなどです。本当は各分野についても書こうかと思っていたのですが、さらに、長くなりそうなので、これも、またいつか、気が向いたときにします。

2015年10月12日月曜日

考える足

 私は歩くのが好きです。昨日は3時間くらい近くの山を散歩してました。

 歩いていると血行が促進されて、いろいろと思考が進みます。かのアリストテレスが歩きながら哲学したというのは納得です。 (ちなみに「人間は考える葦」と言ったのはパスカルです。)

 靴底のすり減り方を見ると、その人が歩くのが得意かどうかが分かります。
 つま先の内側、かかとの外側がすり減っているのが良いすり減り方です。左右のすり減り方のバランスが悪い人や、高いヒールで無理して歩いている人を見ると心配になります。男性と女性では骨盤の形が違うから、難しいんだろうなぁなどと考えています。 余計なお世話ですが。

 さらに余談ですが、私は足音にも少し気を使っています。
 階段では音を立てて歩く人が多いですが、私は音を立てないようにしています。音を立てて歩くのは、膝に衝撃を与えているような気がします。「だから何?」と言われそうですが、大きな音を立てるよりは品があるかなぁと思っています。ただし、死角に人がいそうなときは、あえて音を立ててみたりと、考えながら歩いています

 電車も車もなかった時代は、さぞかし長距離を歩いたのだろうと思います。現代人はいろいろ進歩した代わりに、「歩く」という基礎能力で昔の人よりずいぶん劣っているのでは?、などと考えています。

 という感じで、今日も私はいろいろ考えながら歩いています。



参考:靴底の減り方

2015年10月4日日曜日

トイレのウォシュレット様

 日常の中にも、いろいろ発見はあるものです。先日、住んでいる部屋のトイレのウォシュレットがリモコン式なことに気づきました。

 コントローラが壁に設置されていて、固定されているのかと思っていたら、実は取り外し可能でした。取り外して使うと、ちょうど、トイレに座って携帯ゲーム機で遊んでいる感じになります。間違ったボタンを押したら、マリオがジャンプしちゃいそうです。LOL

 もちろん、特別なトイレというわけではありません。手を伸ばせば壁に手が届く狭さです。

 トイレに座って、ウォシュレットをリモコン操作している図は少し滑稽です。「別にリモコンじゃなくてもいいのでは?」とか、「電池が切れたら?」とか、「リモコンのボタンが効かくなったら?」とか、いろいろ想像して、笑ってしまいました。

 そういえば、以前、どこかのトイレで、ウォシュレットに20個くらいボタンがついていたのを見たことがあります。いくらなんでもボタンが多すぎです。説明書がないと分からないです。トイレに座って、説明書を読みながらウォシュレットを操作する図も少し滑稽です。

 たかがウォシュレットですが、世の中には、より良いウォシュレットを真剣に追求している方が大勢いるはずです。私の目から見たら無意味な機能でも、誰かにとっては意味があるのかもしれません。いろいろな意図が詰まったウォシュレットだと思うと、「たかがウォシュレット」なんて軽んじてはいけない気がします。

 世の中は、自分が知らないことでいっぱいです。自分の価値観で判断したり、固定観念に捕らわれたりするのは良くありません。
 というわけで、「世の中には、いろいろなことを考えている人がいるんだなぁ」と、ウォシュレットを見ながら、おもしろ、おかしく、感心しています。

2015年9月27日日曜日

物価を上げるには

 先週、消費者物価指数が下がったというニュースが流れました。物価の下落は、物が売れていないこと、経済の停滞を意味します。借金の負荷が増すので、借金持ちにはつらい状況です。

 物価を上げる方法はいくつか考えられます。

 まず、単純に通貨の価値を変えること、いわゆるリフレーションです。「明日から100円を120円にします」とすれば、物価は確実に上がります。経済活動の実体は何も変わりませんが。

 単純に通貨の価値を変えるのは、かなり荒っぽい手法です。もう少しマイルドな手法としては、税金をかけるという手法があります。
 例えば、消費税が2倍になれば、物価は上がるはずです。消費税でなくても、電気、ガス、水道や運輸などのインフラにだけ税金をかけても物価は上がるでしょう。省エネ意識も高まるでしょう。
 ・・・経済活動はさらに停滞しそうですが。

 物価を決めるのは需要と供給です。需要が増えれば、物価は上がります。みんながiPhoneを欲しがれば、iPhoneの値段が上がるという原理です。
 iPhoneのように需要を生み出すものを考え出すのは難しいですが、需要を増やす方法は他にもあります。
 例えば、強制的に既存のものを廃棄させる、古いものには罰金を課す、ということをすれば、買い替え需要が生まれるはずです。他にも、火災報知器の義務化のような方法でも需要を作ることが出来ます。

 需要を増やす代わりに供給を減らすという手もあります。供給を減らすには、生産施設の稼働を減らせば良いはずです。つまり、工場の稼働時間に制限を設けるとかです。
 一見、経済活動が弱まりそうですが、労働者の休日が増えて、新たな需要が発生するという可能性もあります。


 以上のように物価を上げる政策はいろいろあります。何かの政策を進めると、損する人と得する人が出てくるでしょう。だから、どの産業を活性化させるかは難しい問題です。そういう難しい選択は、官僚様や経済学者様が、いろいろ考えているのだと思います。
 素人の私は、ただ好奇心で、こんな感じのことを考えています。


 ところで、物価が下落している原因の一つは、私のような物欲の少ない人間です。給料はもらっているけど、生活必需品以外の消費活動をしない人達です。お金を使わない人が多ければ、経済は停滞します。私も罪悪感を抱いています。かといって、無理矢理お金を使うため、パチンコに行くというのもいいとは思えません。お金を使うのは、難しいです。

 ・・・また、Wikipediaに募金しようかな。

2015年9月20日日曜日

思いは伝わらない

 このブログは、誰かに読んでもらおうという気はあまりなく、私が文書を書く練習として書いています。

 それでも閲覧者がいるかどうかは気になるもので、アクセスされていたりすると、「書く変わり者もいれば、読む変わり者もいるのだなぁ」などと思っています。

 にしても、思いは伝わらないものです。

 自分がうまく書けたと思った投稿にはアクセス数が少ないのに、うまく書けなかった思った投稿にはアクセス数が多かったりします。

 バックグラウンドが人によって違うのだから、思いが伝わらないのは、仕方ないことです。「R=0」を美しい数式と思うのは少数の人だけでしょう (ちなみに一般相対性理論の数式です)。私の思いが、他人と同じであるなんてことは、そうそうありません。

 仕事でも思いが伝わらないことは多々あります。上司が分かってくれない。部下が言うことを聞かない。コミュニケーションは難しいです。

 私はコミュニケーションするときは、思いが伝わらないことを前提に、2つのことを心がけています。1つは、平易な言葉で簡潔に表現すること、もう1つは、こまめに繰り返し連絡をすることです。当たり前のことですが、これを実践することが、思いを伝える最良の方法だと思っています。


 このブログも多くの人が読めるように、それなりに気を使って書いています。書く練習とはいえ、読む人を想定した練習です。苦労は伝わっているでしょうか?

 とにもかくにも、どなたかの暇つぶしになっているのであれば幸いです。


2015年9月13日日曜日

The Making

 近所にお寺があります。
 建物はなかなか凝った作りをしていて、軒下のあたりは、独特の曲線に加工された木材で組み上げらています。一つ一つの木材がどのような形か想像するのは、まるでパズルを考えているようです。

 部品を作るときは、いろいろなことを考えます。
 組み立てたときにどうなるか。頑丈な構造になっているかどうか。見た目が美しいかどうか。

 組み上げられるかどうか、というのも重要です。「部品を作ったけど、形が引っかかって、組み立てられない」なんてことは、よくあります。

 現代であれば、CADを使って製図できますが、このお寺を建てた当時は手書きの図面だったでしょう。コンピュータを使ったモデリングの便利さに感嘆するとともに、手書きをしていた職人の技術に感動します。


 どんな物でも、それが人工物なら、作った人がいます。鉛筆でも、鞄でも、家でも、車でもです。

 どんな人がそれを作っていたでしょうか?
 どんなことを考えて、設計していたでしょうか?
 どのような部品、材料が必要でしょうか?
 どのように加工すれば良いでしょうか?

 物の形にはたいてい意味があります。普段、何気なく使っている物でも、「それを自分で作るとしたら?」という視点で見てみると、見えるものが違ってきます。

 「物を作る」ということに関心を持つのは、エンジニアという職業柄でしょう。私は、ときどき、こういう想像を楽しんでいます。


2015年9月6日日曜日

マウスの修理

 マウスを修理しました。

 5年くらい使っている普通のマウスなんですが、シングルクリックのつもりがダブルクリックになったりと、調子が悪くなっていました。こういうのを「チャタリング」というそうです。

 新しいのを買っても良かったのですが、インターネットで調べると簡単に修理できるらしいので、修理することにしました。

 とりあえずマウスを解体して、中のスイッチを¥120で買ってきた新品に入れ替えると、無事に直りました。古いスイッチを外すのが少し大変ですが、修理自体は30分もかからないです。

 最近の電子機器は複雑で、修理が難しいものも多いですが、マウスくらいだと意外に修理できちゃいます。


 もったいない精神に則り、修理して使うと、地球環境にプラスです。
 新品を買って、市場にお金を供給すると、経済にはプラスです。

 新品を買うか、修理するかはいつも悩みどころです。少しお金に余裕があるなら、お金を使った方が良いのだろうなぁと内心は思っています。

 そうは思いつつも、私はできるだけ修理するようしています。理由は、単にうまく直せたときの達成感が気持ちいいからです。



 江戸時代は割れた茶碗も直して使ったと聞きます。先人に倣って、物を修理して使うのも、悪くないものです。



参考:マウスの修理

2015年8月30日日曜日

知恵と知識は使いよう

 先日、某県知事が「女性に三角関数の教育は不要なのでは?」といった主旨の発言をしたことがニュースになりました。

 私みたいな人間は、三角関数は常識だと思っています。なので、三角関数を知らなくてもいいと思っている人がいると聞くのは、カルチャーショックです。

 私は、自分の常識を他人にも当てはめてしまいがちなので、気を付けようと思った次第です。私が知っていて他の人が知らないこともあるし、他の人が知っていて私が知らないこともたくさんあります。


 ところで、知識は使えるかどうかが大事です。英語にしろ数学にしろ、使わずに生きていくこともできます。使わない知識なら学ぶ必要はありません。テストでいい点を取るためだけの知識なら必要ありません。

 三角関数の知識も使わない人にとっては、不要なものでしょう。私にとっては、古文の知識は使いどころがなく、正直不要です。昔、竹取の翁ありけり・・・

 以前、台湾から出向で来ていた方と職場で会話したことがあります。日本語ペラペラの方だったのですが、こちらから「謝謝」と言って笑わせたことがあります。私の中国語の知識は、ほぼゼロですが、それでもわずかな知識をコミュニケーションに活用できました。ささいなことですが、知識を使うというのはこういうことだと思います。

 どんなに知識を持っていても、それを使えなければ宝の持ち腐れです。私は、多くの知識を持ち、それをうまく使える人を、賢く、教養のある人だと思います。そういう人になれるよう、日々の勉強を心がけていきたいと思う次第です。

2015年8月23日日曜日

ブラジルナッツ

 朝食にグラノーラを食べることがあります。穀物のサクサクとした食感と、ドライフルーツの味が合わさっていて、気に入っています。

 グラノーラを食べるときに困るのは、袋を開けたときと、袋の中身が減ったときで、比率が変わることです。袋を開けた直後は、大きな塊が上にあります。最後の方は小さなのばかりです。

 これは大きい粒子と小さい粒子を混ぜたときに起きる現象です。ブラジルナッツ効果と言います。どれくらい有名なのか知りませんが、食品とか粉粒体を扱っている方はご存知でしょう。

 ごま塩なんかでもゴマと塩が分離するということが起きます。日本人が命名したなら、きっと ごま塩効果になっていたでしょう。

 ブラジルナッツ効果という名前は親しみやすいのですが、実は多体問題で複雑な現象です。簡単な数式で表現される法則ではないようです。

 かの物理学者、寺田寅彦は金平糖の角を研究していたことがあるそうです。私も身近なものからも何かを発見できるような観察力を持っていたいと思う次第です。
 (ちなみに寺田寅彦は夏目漱石の小説に登場する物理学者のモデルだそうです。)

参考:グラノーラブラジルナッツ寺田寅彦

2015年8月16日日曜日

ゾウの時間と、ネズミの時間と、

 「ゾウの時間ネズミの時間」という本があります。

 ゾウはネズミより長生きしますが、大きな動物は時間の感覚がのんびりになるから、一生の密度(?)は同じようなものになるというような内容です。読み応えのある良書なので、未読の方はぜひご一読あれ。

 人間も同じで、子供の頃はじっとしているのが退屈でたまりませんが、大人になると1時間くらい平気で待てたりします。

 この話は、夏になってセミを見る度に思い出します。セミは1週間くらいしか地上で過ごしませんが、それでもセミの時間感覚では一生分なのでしょう。


 自分が感じている時間感覚を当たり前と思いがちですが、それは間違いです。ゾウにはゾウの時間感覚があり、ネズミにはネズミの時間感覚があります。子供を育てている方は、子供と大人の時間感覚の違いに苦労されることがあると思います。

 色々な時間感覚を想像してみるのは面白いことです。

 子供の時間感覚ではどう思うか?、大人の時間感覚ではどうか?、1時間のスケールではどう見えるか?、1日の時間スケールでは?、1年の時間スケールでは?。
 考えている時間スケールで、大事なことは変わってきます。色々な視点でものごとを考えると、きっと新たな発見があると思います。
 (余談ですが、ジャック・バウアーにとっては、24時間でできることだけが大事なんです LOL)


 宇宙の年齢は約137億年とのことです。そのスケールで考えれば、人間の歴史なんて一瞬です。宇宙のスケールから見た人間の一生は、人間からみたセミの一生よりずっと短いものです。宇宙のスケールから見れば、今日の失敗にくよくよすることは無意味です。政治や経済に一喜一憂する必要もありません。

 人間の一生なんて、宇宙のスケールから見れば、儚いものです。悩んでいるのは時間の無駄です。願わくば、生きている時間はセミのように一生懸命でいたいと思う次第です。



参考:ゾウの時間ネズミの時間, Wikipedia

2015年8月9日日曜日

都会は暑いです。

 まったく夏の蒸し暑さには辟易します。

 夏が暑いのは、地軸が傾いているからです。調べてみると、地軸は23.4度傾いているそうです。90度の1/4くらいです。この傾きのせいで、夏は北半球に太陽光がよく当たります。というわけで、夏が暑いのは当たり前。

 都会で生活していると、自動車やエアコンの放熱にさらされて、ただでさえ暑い夏が一層暑くなっている気がします。暑いと言って、みんなでエアコンをつけるせいで、さらに暑くなります。

 暇つぶしに、ある都市で300万 [kW]の電力を1時間使ったとして、空気がどれくらい温まるか計算してみます。(ちなみに、東京電力さんによると、現在の電力使用量は4000万 [kW]くらいです。)
 
 都市の大きさは、10 [km] x 10 [km]で、地上100 [m]くらいまでの空気を考えてみます。空気の密度は1 [kg/m^3]、熱容量は、1000 [J/kg K]です。

 3x10^9 [W] x 3600 [s] / ( 1000 [J/kgK] * 10000 [m] x 10000 [m] x 100 [m] x 1 [kg/m^3]) = 1.08 [K]

 気温が1度上昇しました。発生した熱は拡散していくので、発熱と放熱のバランスで、最終的な気温は決まります。ですが、熱の拡散には時間がかかるので、熱源近くは、当然暑いです。

 この計算には、ガソリンの燃焼とかは含まれていません。都市の大きさも適当です。非常に適当な計算ですが、電気を使い続ければ、気温が上がるということは分かりました。(例えば、仮に計算結果が、0.000001 [K]の温度上昇とかであれば、無視できると考えられます。)

 暑いと私の頭のCPUが熱暴走して、変なことを考え出すから困ったものです。
 発熱するパソコンに触っているのが嫌になってきたので、今日はここまで。


参考:東京電力, Wikipedia

2015年8月2日日曜日

都会は疲れます。


 少し前まで田舎暮らしをしていたせいか、都会に引っ越してからの生活は疲れることが多いです。

 都会は人が多いです。外に出れば、大勢の人と出くわします。買い物をしていると、人とぶつからないように、緊張しっぱなしです。

 田舎にいるときは、外に出ても、人が少ないので、ぼんやり遠くの景色を見ながら歩いていました。自転車や自動車と遭遇しても、避ける場所が十分あるので、困ることはありませんでした。それに対して、都会は人が多くて、せわしなくて、気を抜くとぶつかりそうになります。

 仮に人口密度が1.5倍だったとすると、衝突確率は2.25倍です。常に2.25倍の注意力で行動しないといけないのだから、疲れるのは当然です。

 物理学によると、多体問題は解けないことが知られています。3つ以上の物体が運動するときの運動の軌跡は、実際にやってみないと分からないということです。そのため、多体問題を解析するときは、コンピュータシミュレーションで膨大な計算をすることになります。

 街中を歩いている私の頭の中も、人とぶつからないように、人の動きをシミュレーションしています。時々刻々と移り変わる人の動きをずっと計算しているのだから、疲れるのは当然です。

 Wikipediaによると、多体問題が解けないことの証明は、ポアンカレ先生によるらしいです。私はきちんと知りません。未解決な問題も含まれているようです。(・・・勉強しなきゃいけないことが、また一つ増えました。)


 まったく、都会にいると、考えなければいけないことばかりで、本当に疲れます。


参考:Wikipedia

2015年7月26日日曜日

枠にとらわれない

 仕事をしていると、いろいろな文書を書くことがあります。そして、その文書にはフォーマットが決まっている、ということが多々あります。

 フォーマットがあると、見た目がそろったり、記入漏れの防止になったり、といった利点があるはずです。ですが、フォーマットのせいで、文書を書くのに苦労することも多いです。用意されたフォーマットを無視した文書も良く見かけます。

 Excel方眼紙というのがあります。Excelのマス目を方眼紙のように使って、枠を作るというやり方です。 見た目がきれいに作れて便利と思っている方もいるようです。
 私はExcel方眼紙が大嫌いです。理由は使いにくいからです。
 結合したセルは、コピー&ペーストがやりにくくなっています。セルの大きさを調整すると、同じ行 or 列の大きさがすべて変わるので、全体の調整が必要になります。
 文書を書くことが目的なのに、フォーマットの枠の調整に時間がかかるとイライラします。

 フォーマットが使いにくい場合、とるべき道は、あきらめてそのフォーマットを使うか、フォーマットを無視するかの2つです。本来はフォーマットを改定 or 廃止するのが正解ですが、たいていの場合、文書を書く人は、フォーマットを変更する権限を持っていません。そもそも、ころころ変えるようでは、フォーマットの意味がありません。

 あきらめて、使いにくいフォーマットを残していると、後で他の人も苦労します。悪弊であることは明白です。悪いことだと分かっていても、それをせざるを得ない。悪いことだと分かっているのに、そのフォーマットを強要される。そんなときは、心が痛みます。
 未来で苦労する方、ごめんなさい。


 フォーマットを作る仕事を否定する気はありませんが、フォーマットが使いやすいかは、よく考えた方がいいと思っています。
 仕事の効率を上げるためのフォーマットのせいで、むしろ仕事の効率が下がっていることが、かなりの割合で見受けられると思います。


 変化の激しい時代です。変化しやすいようにしておくのは重要です。フォーマットの制約で動きが鈍くなってはいけません。制約を少なく、変化しやすくすることが、変化に対応するコツだと、私は思います。
 話がそれてきそうなので、今回はココマデ。

2015年7月19日日曜日

片付けの第2法則

 以前、片付けの基本法則というのを勝手に作って書きました。今回は、また勝手に作った第2法則です。

 片付けの第2法則は、「ある空間を片付けるには、別の片付けられた空間が必要」というものです。

 同じ大きさの箱A, Bの位置を入れ替えることを考えます。まずAをどこか別の場所に置いて、BをAの位置へ移動、最後にAを元のBの位置に置けばOKです。注意すべきは、箱AとBの場所を入れ替えるために、「別の場所」が必要ということです。
 ちなみにプログラミングの世界では、2つの変数の値をスワップするときに同じことが起きます。変数Aと変数Bの値を入れ替えるには、仮置き用の変数Cが必要です。

 本棚の本を整理するとします。本を置けるのが本棚の中だけだとすると、本棚の空きスペースが1冊分しかなかったら、少しずつしか移動できず、効率が悪いです。本棚の空きスペースが多ければ、一度に仮置きできる量が多くなり、効率が良くなります。
 仮に、本棚をすべて本で埋め尽くしたとすると、そのときの見た目はきれいかもしれませんが、仮置きできるスペースがないから、片付けはできないということになります。


 仮置きできる片付けられた空間が広ければ、別の空間を片付けやすくなります。逆に、仮置きできる片付けられた空間が狭ければ、片付けは難しくなります。部屋の片づけ具合が、現在の部屋の片づけ具合に依存するということは、片付け具合は指数関数ということです。片づいた部屋はますます片づき、汚い部屋はますます汚くなります。
 数学が出てきてしまうのは、理系バカの性質なので、悪しからず。



 とどのつまり、結論は、日々の片付けを効率よくするためには、仮置きできる空間をたくさん用意するべし、ということです。棚や引き出しに隙間なくものを詰め込むと、仮置き場所がなくなるので、きっと次の片付けで苦労します。



 なお「片付けられた空間」の定義があいまいですが、前回同様ご容赦ください。

2015年7月12日日曜日

からだの不思議

 ただいま、病気中です。
 食べ物にあたったのか、下痢、発熱、頭痛で、昨日一日寝込んで、今日は少し回復しました。

 病気になると、普段、気にしていないことに気づきます。
 大腸が水分とかを吸収する器官ということは知っていました。ですが、調子が悪くなって初めて、そのメカニズムを知らないことに気づきました。発熱や頭痛との因果関係も分かりません。
 頭痛ってどこの神経が反応しているのでしょうか? 市販の頭痛薬ってどのような仕組みで頭痛を止めるのでしょうか?

 いつもなら、Wikipediaで体の仕組みを調べるところですが、残念ながら、それほど元気じゃないです。元気になったら調べてみようと思います。元気になっても、病気のことを忘れていなかったら・・・。



 生物の体は非常に巧妙に作られています。

 生物の歴史は1億年 (100,000,000年) 以上です。人間の歴史が1万年 (10,000年) くらいとすると、その1万倍以上です。長い長い時間をかけて進化した結果が私達、現在の生物です。

 長い進化を経て、非常に巧妙にできている私達ですが、けがや病気で不調をきたすこともしょっちゅうです。「頭痛のない体だったら、どんなに楽だろう」なんて考える人がいるかもしれませんが、残念ながら、進化を重ねても頭痛はなくならなかったようです。
 逆に考えると、長い進化を経ても残ったということは、そういう不調もそれなりに必要なのかもしれません。
 自分の体が長い進化の結果だと思うと感心させられます。進化を経ても不調はなくならないことを思うと、その意味を考えさせられます。自分の体は不思議に思うことばかりです。



 何はともあれ、生物の歴史に敬意を払いつつ、もう少し休憩しようと思います。

2015年7月5日日曜日

ただいまアメリカ出張中 5

 アメリカ出張記録の第5弾です。

----- 自動車について -----

 私が行ったのは、田舎の町なので、完全に車社会でした。日本でも電車が通っていない地域は車社会だと思います。それと同じです。

 アメリカの自動車はすごく自由な印象でした。HondaのFit、ToyotaのPrius、ベンツ、Audiなどなど車種は様々、デザイン・色も様々です。そういう普通の自動車と並んで、馬鹿でかいトラックが走っています。さらに、錆びてたり、ガムテープで補修されてたり、走れば何でもいいという感じの車がたくさんいました。合理的と言えば合理的なのかもしれません。

 アメリカは人種のるつぼと呼ばれるだけあって、様々な人がいます。肌の色や身長・体格も様々です。身長2mとか体重100kgの人がいても普通の世界です。そういう社会だと見た目を気にするのが無駄に思えてきます。大事なのは見た目ではなく、中身です。それは人にも車にも当てはまるのかもしれません。
 
 広い道路を走る多種多様の車を見ていると、余計なことに捕らわれない個々人の自由さを感じました。そして、そういった個々人の自由さは、何か問題が起きても自分で対処するという、個々人の強さにつながっている気がしました。

 私の勝手な妄想ですが、そんなところでアメリカ的な精神を実感した気がしました。

ただいまアメリカ出張中 4


 アメリカ出張記録の第4弾です。

----- お金について -----

 アメリカの紙幣は、1, 5, 10, 20, 50, 100ドルの6種類。貨幣は、1, 5, 10, 25セントの4種類です。1セントはペニー、5セントはニッケル、10セントはダイム、25セントはクウォーターとも呼ばれるそうです。なお1ドルは100セントです。

 ダイムは、大きさが1円玉くらいで、ペニーやニッケルより小さいので注意が必要です。貨幣の大きさと価値を比例させてくれれば分かりやすいのに・・・。

 やっかいなのがクウォーターです。なぜ、50セントにしなかったのか。例えば、93セントを貨幣で支払うにはどうすれば良いでしょうか。クウォーター3枚、ダイム1枚、ニッケル1枚、ペニー3枚です。すぐに計算できたでしょうか? 50セントならもっと分かりやすいのに・・・。

 私は、日本では、小銭を使っておつりが少なくなるようにしているのですが、アメリカでは、恥ずかしながら、計算できませんでした。

 貨幣の計算には慣れなかったので、紙幣をよく使いました。1ドル札は100円くらいで便利です。50ドル、100ドル札は見たことがありません。 よく分からない習慣ですが、アメリカでは、きれいなお札は偽札と疑われるらしいです。空港で両替したお札以外はいつもくしゃくしゃでした。

 チップの習慣は日本にないものですが、それほど気にしませんでした。ホテルのルームメイクで、何ドルか置いたくらいです。レストランでは、支払に含まれていたりするので、テーブルに置いたりはしませんでした。クレジットカードの利用も多いはずなので、現金を持たない人も少なくないのでは?と思っています。

参考:http://www.ryokojoho.jp/usa/other/money.cfm

ただいまアメリカ出張中 3

 アメリカ出張記録の第3弾です。

----- 英語について -----

 残念ながら、私はそれほど英語を喋れません。というわけで、いろいろ苦労しました。

 特に困るのは、お店の店員さんとの会話です。たいてい、すごく早口です。何を言っているのか、想像がつくのならいいのですが、生活習慣が違うので、想像するのも大変です。

 例えば、スーパーのレジでPaper or Plasticと言われてもそれが、買い物袋のことだと知らなければ意味不明です。それなりに心構えをしていないと、対応できません。

 しかもアメリカ人の発音は多種多様です。知っている単語ですら、聞き取れないことがあります。びっくりするくらい聞き取れなかったです。

 思い返してみると、学校教育でこういう場面のトレーニングをしたことはありません。覚えているのは、英文をひたすら読んだことです。おかげで、英語の文献を読むことには慣れましたが、書く・話す・聞く能力はあまり上達しませんでした。つくづく、もっと勉強が必要だと思いました。

 英語でのコミュニケーションに苦労した時、役立つのは、表情とジェスチャーです。分からないという顔をすれば、たいてい丁寧に説明してくれます。笑顔のThumbs Upなんかは便利です。ただ「Yes」とか「OK」とか言うより、よっぽど仲良くなれる感じがします。

 教訓 : 笑顔で「Thank You !」、これが一番。

ただいまアメリカ出張中 2

 アメリカ出張記録の第2弾です。

----- 食べ物について -----

 「アメリカと言えばマクドナルド」ということで、空港のマクドナルドでハンバーガーを食べました。ハンバーグの肉の味が濃厚で、おいしかったです。そして大きかったです。

 和牛は赤身と脂肪が混ざった手の込んだ肉ですが、アメリカの肉は自然まかせのワイルドな感じでした。ジューシーな肉そのものの味。そしてとにかく量がいっぱい。

 ホテルの朝食では、焼き立てのワッフル、ベーグル、マフィン、スコーン、ブラウニーなどが出ました。外はサクサクで中はしっとりしていて、ついつい食べ過ぎてしまうおいしさでした。スコーンをおいしいと思ったのは、生まれて初めてです。ホテルに感謝。

 それ以外のホテルの食事は、レタスのサラダとか、メロンなどのフルーツ盛り合わせとか、ソーセージを焼いただけとか、シンプルなものが多かったです。夕飯も用意してくれるホテルだったのですが、サラダと付け合せにサラダが出たときには笑いました。LOL

 食べ物関係で少し困ったのは、飲み物です。ホテルの水道水は少し生臭かったので遠慮して、近くのスーパーで飲み物を買いました。ペットボトルの水は日本と同じです。それ以外の飲み物については、飲んでみないと分かりません。日本で見慣れている商品とは違います。flavoredと書かれた水を買ってみたら、少し薬っぽい感じでした。カフェオレ的なものを買ったら、想像と違う味で、飲むのに苦労しました。

 当然ですが、白いご飯とおかずの食事は出てきません。生卵がないので卵かけごはんもありません。カップ麺を音を立ててすすると変な目で見られます。そういった違いはいろいろありましたが、総じて、食べ物では苦労しませんでした。

参考 : http://xn--u9j531k2nka090l8u9a.com/kaigai/amerika.html

ただいまアメリカ出張中 1

 しばらくアメリカに出張してました。

 初めてのアメリカ大陸です。新鮮です。いろいろな発見がありました。
 というわけで、出張中に思ったいろいろを書いていきます。

----- 自然について -----

 私が行ったのは、ニューヨーク州の片田舎、五大湖の南東のあたりです。緯度は北海道と同じくらいのところに位置します。自然が多く、少し外を歩くと、林の中にリスやウサギがいました。日本で言えば軽井沢に近いと思います。冬は雪に埋もれて、身動きが取れなくなるらしいですが、夏は最高の別荘地とのことです。

 滞在中の天気は、雨続きでした。平年ならもっと晴れているらしいです。それでも湿度が低いので、日本のように、じめじめとした不快感はなかったです。雨が降っても、しばらくすれば空気が乾燥していました。湿度が低いおかげで、晴れて日差しが強い日でも、木陰は涼しく快適でした。海外から日本に来た方が、日本の夏は蒸し暑くて耐えられないと言うのがよく分かります。

 私にとって、とても新鮮だったのは、時間感覚です。緯度が高いため、9:00pmくらいまで太陽が出ていました。会社の就業時間が終わっても明るいので、その後で、ゴルフやバーベキューが楽しめます。仕事に追われるだけではない、充実した生活が営まれていました。
(もちろん、私が見たのはアメリカのごく一部なので、アメリカ全体に当てはまるわけではありませんが。)

 日本でときどきサマータイムの議論がされていますが、太陽が出ている時間は緯度によって変わるので、全国一律に考えるべきではないと思います。地域ごとに合わせた時間感覚で生活する方が、自然な生活だと思いました。

2015年6月6日土曜日

忙殺

 ここ数週間、忙しい日々が続いています。朝起きて、会社へ行って、帰って寝るの繰り返しです。平日は、12時間以上、会社に拘束されていますが、土日はあるので、それほどハードとは言えないかもしれません。世の中には、もっと忙しい方が大勢いるので、大変恐縮なのですが、体力のない私にとっては、なかなかこたえます。

 忙しいのは嫌いです。

 忙しいと、勉強ができません。技術系の仕事なのに、勉強ができないのはつらいです。
 仕事以外でも、群論とか、ルベーグ積分とか、3D CADとか、英語とか、音楽とか、絵画とか、囲碁とか、勉強したいことはたくさんあります。勉強時間があった学生時代が懐かしいです。

 実際は、忙しさを言い訳にしているところもあります。「時間ができても勉強しないのでは?」なんて考えると落ち込みます。

 忙しいと、注意力が落ちます。そのせいか、スタイラスペンを失くしました。100円ショップで買った安物ですが、自分のダメさに落ち込んでいます。

 忙しく働いていても、実際にやっている仕事の生産性は低かったりします。それを意識しだすと、また落ち込みます。


 というわけで、ここのところネガティブです。つまり、疲れて頭が回っていないけど、週1回ブログを書くという自分のルールを守るため、適当にネタをひねり出したということです。 orz


 人生は一度きりです。つまらない日々の繰り返しで終わらないようにしたいものです。

2015年5月31日日曜日

見た目が大事

 人と会うときは、明るい表情をするように心がけています。 外面を良くしようということです。 コンビニでさえ、私は店員さんに明るい印象を持ってもらおうとしています。

 高校生くらいのときは、私も人前でどんな顔をすればいいか分からず、固い顔をしていました。 思春期男子高校生によくあるパターンです。 今でも人付き合いは得意ではありません。 ですが、社会に出て、笑顔の作り方を学んでからは、どんな相手に対しても、明るい表情をするよう心がけています。

 自信がないからといって、おどおどした態度をしていても、相手はいい気分ではないでしょう。 たとえ自信がなくても、相手に好印象を持ってもらえるような態度をした方が、相手の気分はいいはずです。

 相手の持つ印象を操作するために、表情を作るのは悪いことではありません (詐欺師っぽいことをしている罪悪感はありますが)。 初対面の相手の人となりを判断する材料は見た目だけです。 表情や服装に少し気を使って、自分のイメージを少し良くしようとするのは大事なことです。


 街で、服装や髪形にとても気を使っている男性を見かけることがあります。 私は、あまりおしゃれを解さない人間なので、そういう人を尊敬しています。 時々、髪形にはこだわっているのに、服装は雑な人がいたりして、「?」と思うこともありますが。 内容はともあれ、見た目に気を使うのは偉いことです。


 街で、髪とマスクで顔のほとんどを隠している女性を見かけることがあります。 事情もあるのでしょうが、周りの人からは、暗い人と思われると思います。 別に、とびきりの美人でなければいけない訳でもあるまいし、わざわざ暗い雰囲気を作るよりは、明るい雰囲気を作った方がいいのに、と私なんかはと思います。 さわやかな笑顔を作っていれば、たいてい美人です。 たぶん。


 たいてい、人は見た目で相手の人となりを判断して、先入観を持ちます。 明るい見た目の人は明るい人、品のある見た目の人は品のある人、賢そうな見た目の人は賢い人と判断されます。 見た目は大事です。 頑張りすぎる必要はないと思いますが、それなりには気を使うべきだと思っています。

・・・まぁ、そんな私は、今日も無精ひげなんですが orz



参考:笑顔の作り方

2015年5月23日土曜日

重曹ふたたび

 以前、引っ越しの掃除でクエン酸と重曹が役立った、ということを書きました。このとき、実際に使ったのはキレートレモンと洗濯洗剤トップです (笑)。

 洗濯洗剤に含まれる重曹でも効果があるということが分かったので、今度は、ためしに、洗濯洗剤をキッチンの流しに振り掛けてみました。 (ちなみに今回は花王のビーズです。)

・・・予想以上に効果がありました。

 キッチンの流しは、掃除をしてもすぐにぬめりがたまって悪臭を放ちますが、洗濯洗剤を少しふりかけただけで、ぬめりも臭いもかなり抑制されました。

 お手軽なので、試してみてはいかがでしょうか?
 なお、メーカー非推奨の使用方法だと思うので、試してみるときは、自己責任でお願いします。

参考URL:http://antiaging.akicomp.com/?p=4953

2015年5月17日日曜日

無理な質問

 先日、歯医者に行きました。
口を開けて歯を診てもらって、簡単な質問をされました。

・・・口を開けているときに、質問するのは無理があると思います。
 どうやって返事をすればいいのでしょうか? 「痛くないですか?」 と聞かれて、口を開けたまま「痛いです。」 と言う方法があったら、教えて下さい。
(その後で、「痛かったら手を上げて」 と言ってもらえて助かりました。)



 幼稚園のときに「将来は何になりたい?」と聞かれたことがあります。

・・・幼稚園児に、なりたい職業を質問するのは無理があると思います。
 幼稚園児が知っている知識なんて、たかが知れてます。実際の職業の中身なんて知るわけがありません。知らないことを聞かれても、答えられないのが当たり前です。

 小学生のなりたい職業ランキングがニュースになることがありますが、子供の側からすれば、
「そもそも、職業についてたいして知らねーんだから、聞くなよ。」
くらいに思っている気もします。



 仕事で上司から 「それで大丈夫なのか?」 と聞かれたことがあります。
 これも無理な質問だと思います。この質問に「ダメです。」と答える強者は、それほどいないでしょう。「しっかり確認しろ」という意図なのでしょうが、質問が漠然としすぎです。せめて、「リスクはどこにありそうなの?」 くらい具体的にした方が良いと思いました。

(「ダメだったら、お前の責任だぞ」という裏の声が聞こえる気がします。部下の失敗は上司の責任という認識がないのだろうと思いました。自分の責任という認識なら、もっと真剣に考えるだろうに。自分は気を付けよう。自戒。以上、心の声。)



 以上、世の中にはびこる無理な質問でした。


2015年5月9日土曜日

もしもピアノが弾けたなら

 最近、私の中でゲーム音楽がブームです。例えば、こんな感じです。もうひとつ

 こういう曲を聴くと、昔やったゲームの名シーンがよみがえります。ゲーム音楽は、ゲームの場面に合わせて作曲されているので、明るい曲、暗い曲、激しい曲、静かな曲などなど、様々なバリエーションがあります。戦闘シーンのBGMは、元気が出てきます。(なお、私は、一応、ゲーム好きなんですが、ハードウェアがSFCで止まっているので、少し古いゲームしか知りません。)

 ゲーム音楽について少し解説すると、ファミコンでは、ハードウェアの制約で、同時に鳴らせる音が4つだけでした。しかも矩形波や三角波といったブザーみたいな音だけです。マリオの音楽も、ドラゴンクエストの音楽も、その制約がある中で作曲されています。スーパーファミコンでは、同時に鳴らせる音が8つになり、ブザー以外の音色も使えるようになりました。

 最近は、コンピュータが進化したおかげで、ハードウェアの制約はほとんどないはずです。なのですが、私は、制約がある時代のゲーム音楽が好きです。使える音が限られていたせいか、メロディが単純で、インパクトがあると思います。

 ハードウェアに制約がある時代の作曲は大変だったと思います。作曲家の苦労が偲ばれます。作曲家の努力の結晶を認めているのは、私だけではないようで、プロのオーケストラがスーパーマリオやドラゴンクエストの曲を演奏することもあるそうです。(題名のない音楽会)

 私も、いつか楽器を弾けるようになったら、ゲーム音楽を弾いてみたいと思う今日この頃です。



参考:ゲーム音楽の仕組み

2015年5月3日日曜日

いろいろな視点

 先日、NHKの報道にやらせがあったという問題についての民放のワイドショーをちらっと見ました。やらせの問題については、たいして興味ないのですが、ワイドショーの解説者の方が、それをさも大きな問題として扱っているのに興味を持ちました。

 なぜ、あの解説者の方は、あれほど怒っていたのでしょうか? 報道関係者として、やらせが許せなかったのかもしれません。NHKが嫌いなだけかもしれません。視聴者向けのパフォーマンスという意図があったのかもしれません。

 ワイドショーの番組スタッフは、なぜこのような番組にしようと思ったのでしょうか? 私には針小棒大に見えたのですが、敢えてそうすることで、視聴者に伝えたいことがあったのかもしれません。残念ながら、私には何も伝わりませんでしたが。

 普通の視聴者は、この問題をどう考えているでしょうか? おそらく、さして興味を持つ人はいないと思います。公共放送が情報をねつ造するというのは、ゆゆしき事態ですが、自分に直接被害がないのであれば、普通は気にしないものです。ワイドショーがどんなに騒いでも、視聴者の心を動かすことはないと思います。

 NHKの偉い人は、この問題をどう考えているでしょうか? 問題を適当に収束させたい、というのが本音でしょう。もしかしたら、この騒動をきっかけに、NHKの報道の改善を検討をしている人も、中にはいるのかもしれません。

 やらせが事実だとしたら、その当事者は、なぜやらせをしたのでしょうか? 裏で金銭の授受があったのかもしれません。注目されたかっただけかもしれません。もしくは、自分の取材に都合の良いストーリーを作りたかったのかもしれません。ストーリーを作りたかったというのであれば、昨今、話題になった実験結果のねつ造と同じ心理なのでしょう。

 NHKの番組スタッフは、一番つらい思いをしていることでしょう。いい番組を作ろうと思っているのに、メンバーの中に裏切り者がいて、番組に傷をつけられるというのは苦痛のはずです。私がその立場だったら、とてもやるせない思いをしていることでしょう。

 念のために、断っておきますが、私はこの問題について、NHKを非難するつもりも、ワイドショーを非難するつもりもありません。ただ、いろいろな人の、いろいろな思惑を想像してみただけです。いろいろな立場を想像してみたら、思いのほか想像が膨らんで、自分がその立場だったらどう思っているだろう、と考えてしまったというだけです。

 かのシャーロック・ホームズは、自分が犯人と同じ体格、知能であると仮定したとき、どのように行動するかを推理していました。いろいろな視点を想像してみると、何か新しい発見をすることがあるかもしれません。こういう想像は、ホームズ先生が好きな私の思考のクセの一つです。





2015年4月26日日曜日

パソコンのお掃除

 2~3日前に、使っているノートパソコンのファンがうるさいことに気付きました。

 重たいソフトウェアを起動しているわけでもないのに、ファンの回転音が鳴りっぱなしで、CPUの辺りが熱くなっていました。

 これはいかん、ということで、すぐに中を開けてファンを取り外してみました。案の定、中からスポンジみたいに固まった綿埃が出てきました。綿埃を取り除くと、以前のように静かな状態に戻りました。

 おそらく、そのまま放置していたら、熱のダメージでパソコンの寿命が縮んでいたでしょう。使っているパソコンがクラッシュするのは、想像するだけでも怖いです。

 たまに掃除するだけでいいものは、つい掃除を忘れて、いつの間にか汚くなっていたりするものです。そして、気付かないうちに、ものをダメにしてしまうというのは、よくあるパターンです。

 ものを長持ちさせるためにも、ときどきは、普段掃除していない所にも目を向けよう、とつくづく思いました。



・・・とは言っておきながら、掃除を忘れているところが多々あるんだろうなぁ。

2015年4月19日日曜日

ピーターの法則

 ピーターの法則というのを最近知りました。ピーターの法則とは、組織の構成員についての法則です。

 ある役職で優秀な結果を出した人は昇進するでしょう。その人が次の役職でも結果を出したら、さらに昇進するでしょう。これが繰り返されると、その人は結果を出せなくなるまで昇進することになります。最終的には、すべての役職は、その役職で結果を出すことが出来ない人に埋め尽くされることになります。これがピーターの法則です。

 あなたが今の役職にいるのは、まだ結果を出せていないからです。もっとがんばりましょう。

 あなたの上司がその役職にいるのは、まだその役職の仕事を十分にこなせていないからです。上司が少しくらいダメでも大目に見てあげましょう。

 ピーターの法則は、極端ではありますが、面白い考え方だと思います。

 まぁ現実では、結果を出していない人が出世したり、評価されるべき人が評価されていなかったりするものですが。

参考:wikipedia

2015年4月12日日曜日

Excelでマップ描画

 Excel VBAでマップ画像を作成するマクロを作ってみました。等高線の描画もできます。ちょっと長いですが、ソースコードを以下に載せます。標準モジュールにコピーすれば使えるはずです。

 sample_data関数で適当なデータを作ります。draw関数でマップを作って描画します。趣味なのでコメントとかは少ないですが、ソースコードを見れば、内容は分かると思います。

 Excelでビットマップを描画しているところがポイントです。しかも、Windows APIを使わずに文字列を描画しています。本当はPNG保存にしたかったんですが、難しい点があったので、ペイントを起動する関数だけ用意しました。

 元々はSiウェハ上の測定データからマップを作るマクロなんですが、いろいろと応用できると思います。

 興味ある方は、ご自由にご利用ください。


2016/2/21 ソースコードを新しくしました。


Option Explicit

Public Const PI = 3.1415926535

'---------- 画像関連パラメータ ----------
Private Const IMAGE_SIZE As Long = 256
Private Const MARGIN_SIZE As Long = 16

Private Const MAP_IMAGE As String = "MAP_IMAGE"
'----------------------------------------

'データ座標の範囲
Private Const DATA_SCALE As Double = 200

'等高線の分割数
Private Const NUM_CONTOUR_LEVELS As Integer = 8

'フォントのビットマップデータ
Private fnt() As Byte

'---------- カラーマップ関連パラメータ ----------
Private Const COLOR_MAP_TYPE_GRAY As Integer = 1
Private Const COLOR_MAP_TYPE_JET1 As Integer = 2
Private Const COLOR_MAP_TYPE_JET2 As Integer = 3
Private Const COLOR_MAP_TYPE_HSV As Integer = 4

Private color_map_type As Integer
Private color_min As Double
Private color_max As Double
'------------------------------------------------

'---------- 補間関連パラメータ ----------
Private Const INTERPOLATION_TYPE_LINEAR As Integer = 1
Private Const INTERPOLATION_TYPE_GAUSS As Integer = 2

Private interpolation_type As Integer
Private range As Double
Private sigma As Double
'----------------------------------------



Private Sub test_bitmap()
    Dim i As Long
    Dim j As Long
    Dim width As Long
    Dim height As Long
    Dim pos As Long
    Dim data() As Byte
    Dim filename As String
 
    '------------------------------
    'データの作成
    width = 256
    height = 128
    ReDim data(width * height * 3 - 1) As Byte
 
    For i = 0 To height - 1
        For j = 0 To width - 1
            pos = (width * i + j) * 3
            data(pos + 0) = CByte(255)              'Blue
            data(pos + 1) = CByte(255 / height * i) 'Green
            data(pos + 2) = CByte(255 / width * j)  'Red
        Next j
    Next i
 
    drawString data, width, height, "Hello", 30, 60
    '------------------------------
 
    filename = ThisWorkbook.Path + "\test.bmp"
 
    'ファイルに書き出す
    writeBitmap filename, data, width, height
End Sub

Private Sub test_color_map()
    Dim i As Long
    Dim r As Byte
    Dim g As Byte
    Dim b As Byte
 
    For i = 0 To 31
        hsv2rgb CByte(255 * i / 32), r, g, b
        'jet2rgb1 CByte(255 * i / 32), r, g, b
        'jet2rgb2 CByte(255 * i / 32), r, g, b
     
        '適当な位置に表示
        Sheet1.Cells(1 + i, 10) = i
        Sheet1.Cells(1 + i, 11) = r
        Sheet1.Cells(1 + i, 12) = g
        Sheet1.Cells(1 + i, 13) = b
    Next i
End Sub

Private Sub test_weight()
    Dim i As Long
    Dim w As Double
 
    range = Sheet1.Cells(9, 3).value
    sigma = Sheet1.Cells(10, 3).value
 
    For i = 0 To 63
        If i < range Then
            w = CDbl(1) - i / range
            'w = Exp(-i * i / sigma / sigma)
        Else
            w = 0
        End If
     
        '適当な位置に表示
        Sheet1.Cells(1 + i, 10) = i
        Sheet1.Cells(1 + i, 11) = w
    Next i
End Sub

'テストデータの作成
Public Sub sample_data()
    Dim i As Long
    Dim N As Long
    Dim x As Double
    Dim y As Double
    Dim data As Double

    Sheet1.Cells.Delete
 
    Sheet1.Cells(1, 1) = "title"
    Sheet1.Cells(1, 3) = "sample"
 
    Sheet1.Cells(2, 1) = "show"
    Sheet1.Cells(2, 2) = "map"
    Sheet1.Cells(2, 3).Validation.Delete
    Sheet1.Cells(2, 3) = "ON"
    Sheet1.Cells(2, 3).Validation.Add Type:=xlValidateList, Formula1:="ON,off"
 
    Sheet1.Cells(3, 2) = "contour"
    Sheet1.Cells(3, 3).Validation.Delete
    Sheet1.Cells(3, 3).Validation.Add Type:=xlValidateList, Formula1:="ON,off"
    Sheet1.Cells(3, 3) = "ON"
 
    Sheet1.Cells(4, 2) = "data point"
    Sheet1.Cells(4, 3).Validation.Delete
    Sheet1.Cells(4, 3).Validation.Add Type:=xlValidateList, Formula1:="ON,off"
    Sheet1.Cells(4, 3) = "ON"
 
    Sheet1.Cells(5, 1) = "color"
    Sheet1.Cells(5, 2) = "type"
    Sheet1.Cells(5, 3) = "jet2"
    Sheet1.Cells(5, 3).Validation.Delete
    Sheet1.Cells(5, 3).Validation.Add Type:=xlValidateList, Formula1:="gray,jet1,jet2,hsv"
    Sheet1.Cells(6, 2) = "min"
    Sheet1.Cells(6, 3) = "=MIN(c13:c256)"
    Sheet1.Cells(6, 3).NumberFormatLocal = "0.00_ "
    Sheet1.Cells(7, 2) = "max"
    Sheet1.Cells(7, 3) = "=Max(c13:c256)"
    Sheet1.Cells(7, 3).NumberFormatLocal = "0.00_ "
 
    Sheet1.Cells(8, 1) = "interpolation"
    Sheet1.Cells(8, 2) = "type"
    Sheet1.Cells(8, 3) = "linear"
    Sheet1.Cells(8, 3).Validation.Delete
    Sheet1.Cells(8, 3).Validation.Add Type:=xlValidateList, Formula1:="linear,gauss"
    Sheet1.Cells(9, 2) = "range"
    Sheet1.Cells(9, 3) = 50
    Sheet1.Cells(10, 2) = "sigma"
    Sheet1.Cells(10, 3) = 16
 
    Sheet1.Cells(12, 1) = "x"
    Sheet1.Cells(12, 2) = "y"
    Sheet1.Cells(12, 3) = "data"
 
    N = 64
 
    For i = 0 To N - 1
        x = DATA_SCALE / 2 * i / N * Math.Cos(6 * PI * i / N)
        y = DATA_SCALE / 2 * i / N * Math.Sin(6 * PI * i / N)
        data = Exp((-x ^ 2 - y ^ 2) / (2 * 50 * 50))
     
        Sheet1.Cells(i + 13, 1) = x
        Sheet1.Cells(i + 13, 2) = y
        Sheet1.Cells(i + 13, 3) = data
    Next i
End Sub

'マップ描画マクロ本体
Public Sub draw()
    Dim i As Long
    Dim str As String
 
    Dim N As Long
    Dim xPos() As Double
    Dim yPos() As Double
    Dim data() As Double
 
    Dim mapData() As Double     '補間後データ
    Dim weight() As Double      '重みデータ
    Dim imgData() As Byte       '画像データ
 
    '--------------------------------------------------
    'データの取得
    getParameter
 
    Sheet1.Cells(12, 3).Select
    If Sheet1.Cells(13, 3) = "" Then Exit Sub
    N = Selection.End(xlDown).Row - 12
 
    ReDim xPos(N - 1) As Double
    ReDim yPos(N - 1) As Double
    ReDim data(N - 1) As Double
 
    For i = 0 To N - 1
        xPos(i) = Sheet1.Cells(i + 13, 1).value
        yPos(i) = Sheet1.Cells(i + 13, 2).value
        data(i) = Sheet1.Cells(i + 13, 3).value
    Next i
 
    ReDim mapData(IMAGE_SIZE * IMAGE_SIZE - 1) As Double
    ReDim weight(IMAGE_SIZE * IMAGE_SIZE - 1) As Double
    ReDim imgData(IMAGE_SIZE * IMAGE_SIZE * 3 - 1) As Byte
 
    '--------------------------------------------------
    'データの補間
    gridding mapData, weight, xPos, yPos, data, N
 
    '--------------------------------------------------
    '画像の作成
    For i = 0 To IMAGE_SIZE * IMAGE_SIZE * 3 - 1
        imgData(i) = CByte(255)
    Next i
 
    str = Sheet1.Cells(1, 3).Text
    drawString imgData, IMAGE_SIZE, IMAGE_SIZE, str, 0, IMAGE_SIZE - 16
 
    If Sheet1.Cells(2, 3) = "ON" Then
        drawMap imgData, mapData
        drawColorScale imgData
     
        str = Sheet1.Cells(6, 3).Text
        drawString imgData, IMAGE_SIZE, IMAGE_SIZE, str, IMAGE_SIZE / 4 - 8 * Len(str), 0
     
        str = Sheet1.Cells(7, 3).Text
        drawString imgData, IMAGE_SIZE, IMAGE_SIZE, str, IMAGE_SIZE * 3 / 4, 0
    End If
 
    If Sheet1.Cells(3, 3) = "ON" Then
        drawContour imgData, mapData
    End If
 
    If Sheet1.Cells(4, 3) = "ON" Then
        drawDataPoints imgData, xPos, yPos, N
    End If
 
    drawEdge imgData
 
    ChDir ThisWorkbook.Path
    writeBitmap "map.bmp", imgData, IMAGE_SIZE, IMAGE_SIZE
 
    '--------------------------------------------------
    '重み画像の保存
    For i = 0 To IMAGE_SIZE * IMAGE_SIZE * 3 - 1
        imgData(i) = CByte(255)
    Next i
 
    drawString imgData, IMAGE_SIZE, IMAGE_SIZE, "weight", 0, IMAGE_SIZE - 16
 
    drawWeight imgData, weight
    drawColorScale imgData
    drawDataPoints imgData, xPos, yPos, N
    drawEdge imgData
 
    writeBitmap "weight.bmp", imgData, IMAGE_SIZE, IMAGE_SIZE
 
    '--------------------------------------------------
 
    '画像の貼り付け
    Dim shp As Shape
 
    For Each shp In Sheet1.Shapes
        If shp.Name = MAP_IMAGE Then shp.Delete
    Next
 
    Set shp = Sheet1.Shapes.AddPicture("map.bmp", False, True, 250, 50, IMAGE_SIZE, IMAGE_SIZE)
    shp.Name = MAP_IMAGE
End Sub

'パラメータの取得
Private Sub getParameter()
    Select Case Sheet1.Cells(5, 3)
        Case "gray"
            color_map_type = COLOR_MAP_TYPE_GRAY
        Case "jet1"
            color_map_type = COLOR_MAP_TYPE_JET1
        Case "jet2"
            color_map_type = COLOR_MAP_TYPE_JET2
        Case "hsv"
            color_map_type = COLOR_MAP_TYPE_HSV
    End Select
         
    color_min = Sheet1.Cells(6, 3).value
    color_max = Sheet1.Cells(7, 3).value
 
    Select Case Sheet1.Cells(8, 3)
        Case "linear"
            interpolation_type = INTERPOLATION_TYPE_LINEAR
        Case "gauss"
            interpolation_type = INTERPOLATION_TYPE_GAUSS
    End Select
 
    range = Sheet1.Cells(9, 3).value
    sigma = Sheet1.Cells(10, 3).value
End Sub

'マップの描画
Private Sub drawMap(ByRef imgData() As Byte, mapData() As Double)
    Dim i As Long
    Dim j As Long
    Dim pos As Long
    Dim temp As Long
    Dim r As Byte
    Dim g As Byte
    Dim b As Byte
 
    For i = MARGIN_SIZE To IMAGE_SIZE - MARGIN_SIZE - 1
        '円形の領域だけ描画
        temp = Sqr((IMAGE_SIZE / 2 - MARGIN_SIZE) ^ 2 - (IMAGE_SIZE / 2 - i) ^ 2)
     
        For j = IMAGE_SIZE / 2 - temp To IMAGE_SIZE / 2 + temp
            pos = i * IMAGE_SIZE + j
            getColor mapData(pos), color_min, color_max, r, g, b
            imgData(pos * 3 + 0) = b
            imgData(pos * 3 + 1) = g
            imgData(pos * 3 + 2) = r
        Next j
    Next i
End Sub

'重みマップの描画
Private Sub drawWeight(ByRef imgData() As Byte, weight() As Double)
    Dim i As Long
    Dim j As Long
    Dim min As Double
    Dim max As Double
    Dim pos As Long
    Dim temp As Long
    Dim r As Byte
    Dim g As Byte
    Dim b As Byte

    min = weight(0)
    max = weight(0)

    For i = 0 To IMAGE_SIZE * IMAGE_SIZE - 1
        If max < weight(i) Then
            max = weight(i)
        End If
     
        If weight(i) < min Then
            min = weight(i)
        End If
    Next i

    For i = MARGIN_SIZE To IMAGE_SIZE - MARGIN_SIZE - 1
        '円形の領域だけ描画
        temp = Sqr((IMAGE_SIZE / 2 - MARGIN_SIZE) ^ 2 - (IMAGE_SIZE / 2 - i) ^ 2)
     
        For j = IMAGE_SIZE / 2 - temp To IMAGE_SIZE / 2 + temp
            pos = i * IMAGE_SIZE + j
            getColor weight(pos), min, max, r, g, b
            imgData(pos * 3 + 0) = b
            imgData(pos * 3 + 1) = g
            imgData(pos * 3 + 2) = r
        Next j
    Next i
End Sub

'カラースケールを描画
Private Sub drawColorScale(ByRef imgData() As Byte)
    Dim i As Long
    Dim j As Long
    Dim pos As Long
    Dim r As Byte
    Dim g As Byte
    Dim b As Byte

    For i = MARGIN_SIZE / 4 To MARGIN_SIZE * 3 / 4 - 1
        For j = IMAGE_SIZE / 4 To IMAGE_SIZE * 3 / 4 - 1
            pos = i * IMAGE_SIZE + j
            getColor CDbl(j - IMAGE_SIZE / 4), 0, IMAGE_SIZE / 2 - 1, r, g, b
            imgData(pos * 3 + 0) = b
            imgData(pos * 3 + 1) = g
            imgData(pos * 3 + 2) = r
        Next j
    Next i
End Sub

'等高線を描画
'隣のピクセルとの間に等高線があるかをチェックして、あれば黒く塗りつぶす
Private Sub drawContour(ByRef imgData() As Byte, mapData() As Double)
    Dim i As Long
    Dim ix As Long
    Dim iy As Long
    Dim pos As Long
    Dim temp As Long
    Dim level() As Double
 
    ReDim level(NUM_CONTOUR_LEVELS + 1) As Double
 
    For i = 0 To NUM_CONTOUR_LEVELS
        level(i) = color_min + (color_max - color_min) * i / NUM_CONTOUR_LEVELS
    Next i
 
    For iy = MARGIN_SIZE To IMAGE_SIZE - MARGIN_SIZE - 1
        temp = Sqr((IMAGE_SIZE / 2 - MARGIN_SIZE) ^ 2 - (IMAGE_SIZE / 2 - iy) ^ 2)
     
        For ix = IMAGE_SIZE / 2 - temp To IMAGE_SIZE / 2 + temp
            pos = iy * IMAGE_SIZE + ix
         
            For i = 1 To NUM_CONTOUR_LEVELS - 1
                '隣(右と下)のピクセルをチェック
                If (mapData(pos) - level(i)) * (mapData(pos + 1) - level(i)) < 0 _
                    Or (mapData(pos) - level(i)) * (mapData(pos + IMAGE_SIZE) - level(i)) < 0 Then
                    imgData(pos * 3 + 0) = CByte(0)
                    imgData(pos * 3 + 1) = CByte(0)
                    imgData(pos * 3 + 2) = CByte(0)
                End If
            Next i
        Next ix
    Next iy
End Sub

'データ点の描画
Private Sub drawDataPoints(ByRef imgData() As Byte, xPos() As Double, yPos() As Double, N As Long)
    Dim i As Long
    Dim j As Long
    Dim ix As Long
    Dim iy As Long
    Dim pos(4) As Long
    Dim ratio As Double

    ratio = (IMAGE_SIZE - 2 * MARGIN_SIZE) / DATA_SCALE
 
    For i = 0 To N - 1
        If Math.Abs(xPos(i)) < DATA_SCALE / 2 And Math.Abs(yPos(i)) < DATA_SCALE / 2 Then
            ix = xPos(i) * ratio + IMAGE_SIZE / 2
            iy = yPos(i) * ratio + IMAGE_SIZE / 2
         
            If 0 <= ix And ix < IMAGE_SIZE And 0 <= iy And iy < IMAGE_SIZE Then
                pos(0) = iy * IMAGE_SIZE + ix
                pos(1) = pos(0) - 1
                pos(2) = pos(0) + IMAGE_SIZE
                pos(3) = pos(0) + 1
                pos(4) = pos(0) - IMAGE_SIZE
             
                For j = 0 To 4
                    imgData(pos(j) * 3 + 0) = CByte(0)
                    imgData(pos(j) * 3 + 1) = CByte(0)
                    imgData(pos(j) * 3 + 2) = CByte(0)
                Next j
            End If
        End If
    Next i
End Sub

'輪郭の描画
Private Sub drawEdge(ByRef imgData() As Byte)
    Dim i As Long
    Dim j As Long
    Dim ix As Long
    Dim iy As Long
    Dim pos(3) As Long
 
    For i = 0 To IMAGE_SIZE
        iy = (IMAGE_SIZE / 2 - MARGIN_SIZE) * Math.Sin(PI * i / 2 / IMAGE_SIZE)
        ix = (IMAGE_SIZE / 2 - MARGIN_SIZE) * Math.Cos(PI * i / 2 / IMAGE_SIZE)
     
        pos(0) = (IMAGE_SIZE / 2 + iy) * IMAGE_SIZE + IMAGE_SIZE / 2 + ix
        pos(1) = (IMAGE_SIZE / 2 + ix) * IMAGE_SIZE + IMAGE_SIZE / 2 - iy
        pos(2) = (IMAGE_SIZE / 2 - iy) * IMAGE_SIZE + IMAGE_SIZE / 2 - ix
        pos(3) = (IMAGE_SIZE / 2 - ix) * IMAGE_SIZE + IMAGE_SIZE / 2 + iy
     
        For j = 0 To 3
            imgData(pos(j) * 3 + 0) = CByte(0)
            imgData(pos(j) * 3 + 1) = CByte(0)
            imgData(pos(j) * 3 + 2) = CByte(0)
        Next j
    Next i
End Sub

'2次元のグリッディング
Private Sub gridding(ByRef mapData() As Double, ByRef weight() As Double, xPos() As Double, yPos() As Double, data() As Double, N As Long)
    Dim i As Long
    Dim ix As Long
    Dim iy As Long
    Dim pos As Long
 
    Dim left As Long
    Dim top As Long
    Dim right As Long
    Dim bottom As Long
 
    Dim range2 As Double
    Dim sigma2 As Double
    Dim ratio As Double
    Dim x2 As Double
    Dim y2 As Double
    Dim r2 As Double
    Dim w As Double
 
    'メモリの初期化
    For i = 0 To IMAGE_SIZE * IMAGE_SIZE - 1
        mapData(i) = 0
        weight(i) = 0
    Next i
 
    range2 = range ^ 2
    sigma2 = 2 * sigma ^ 2
    ratio = (IMAGE_SIZE - 2 * MARGIN_SIZE) / DATA_SCALE
 
    'グリッディング
    For i = 0 To N - 1
        'ループ領域を計算
        bottom = (yPos(i) - range) * ratio + IMAGE_SIZE / 2
        top = (yPos(i) + range) * ratio + IMAGE_SIZE / 2
        left = (xPos(i) - range) * ratio + IMAGE_SIZE / 2
        right = (xPos(i) + range) * ratio + IMAGE_SIZE / 2
     
        'ループ領域を確認
        If bottom < 0 Then bottom = 0
        If IMAGE_SIZE - 1 < bottom Then bottom = IMAGE_SIZE - 1
        If top < 0 Then top = 0
        If IMAGE_SIZE - 1 < top Then top = IMAGE_SIZE - 1
        If left < 0 Then left = 0
        If IMAGE_SIZE - 1 < left Then left = IMAGE_SIZE - 1
        If right < 0 Then right = 0
        If IMAGE_SIZE - 1 < right Then right = IMAGE_SIZE - 1
     
        '重みつき平均の計算
        For iy = bottom To top
            y2 = ((iy - IMAGE_SIZE / 2) / ratio - yPos(i)) ^ 2
         
            For ix = left To right
                x2 = ((ix - IMAGE_SIZE / 2) / ratio - xPos(i)) ^ 2
                r2 = x2 + y2

                If r2 < range2 Then
                    If interpolation_type = INTERPOLATION_TYPE_LINEAR Then
                        w = CDbl(1) - Sqr(r2) / range
                    ElseIf interpolation_type = INTERPOLATION_TYPE_GAUSS Then
                        w = Exp(-r2 / sigma2)
                    End If
             
                    pos = iy * IMAGE_SIZE + ix
                    mapData(pos) = mapData(pos) + w * data(i)
                    weight(pos) = weight(pos) + w
                End If
            Next ix
        Next iy
    Next i
 
    '重みで規格化
    For i = 0 To IMAGE_SIZE * IMAGE_SIZE - 1
        If 0.000001 < weight(i) Then
            mapData(i) = mapData(i) / weight(i)
        Else
            mapData(i) = 0
        End If
    Next i
End Sub

'文字の描画
'x,y : 描画する文字の左下の座標(ビットマップと同じ座標系)
Private Sub drawString(ByRef imgData() As Byte, width As Long, height As Long, str As String, x As Long, y As Long)
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim key As Long
    Dim pos As Long
    Dim temp As Byte
 
    createFont
 
    For i = 0 To Len(str) - 1
        key = Asc(Mid(str, i + 1, 1))
     
        For j = 0 To 15
            temp = fnt((key - 32) * 16 + j)
         
            For k = 0 To 7
                If temp Mod 2 = 1 And 0 <= x + 8 * i + k And x + 8 * i + k < width And 0 <= y + j And y + j < height Then
                    pos = ((y + j) * width + (x + 8 * i + k)) * 3
             
                    imgData(pos + 0) = CByte(0)
                    imgData(pos + 1) = CByte(0)
                    imgData(pos + 2) = CByte(0)
                End If
             
                temp = temp \ 2
            Next k
        Next j
    Next i
End Sub

Private Sub getColor(data As Double, min As Double, max As Double, ByRef r As Byte, ByRef g As Byte, ByRef b As Byte)
    Dim temp As Double
 
    temp = data
    If temp < min Then temp = min
    If max < temp Then temp = max
 
    temp = 255# * (temp - min) / (max - min)
 
    If color_map_type = COLOR_MAP_TYPE_GRAY Then
        b = CByte(temp)
        g = CByte(temp)
        r = CByte(temp)
    ElseIf color_map_type = COLOR_MAP_TYPE_JET1 Then
        jet2rgb1 CByte(temp), r, g, b
    ElseIf color_map_type = COLOR_MAP_TYPE_JET2 Then
        jet2rgb2 CByte(temp), r, g, b
    ElseIf color_map_type = COLOR_MAP_TYPE_HSV Then
        hsv2rgb CByte(temp), r, g, b
    End If
End Sub

Private Sub hsv2rgb(value As Byte, ByRef r As Byte, ByRef g As Byte, ByRef b As Byte)
    Dim temp As Double
 
    temp = value / 255#
 
    If temp < 1 / 6 Then
        r = CByte(255)
        g = CByte(255 * (6 * temp))
        b = CByte(0)
    ElseIf temp < 2 / 6 Then
        r = CByte(255 * (2 - 6 * temp))
        g = CByte(255)
        b = CByte(0)
    ElseIf temp < 3 / 6 Then
        r = CByte(0)
        g = CByte(255)
        b = CByte(255 * (6 * temp - 2))
    ElseIf temp < 4 / 6 Then
        r = CByte(0)
        g = CByte(255 * (4 - 6 * temp))
        b = CByte(255)
    ElseIf temp < 5 / 6 Then
        r = CByte(255 * (6 * temp - 4))
        g = CByte(0)
        b = CByte(255)
    Else
        r = CByte(255)
        g = CByte(0)
        b = CByte(255 * (6 - 6 * temp))
    End If
End Sub

Private Sub jet2rgb1(value As Byte, ByRef r As Byte, ByRef g As Byte, ByRef b As Byte)
    Dim temp As Double
 
    temp = value / 255#
 
    If temp < 1 / 8 Then
        r = CByte(0)
        g = CByte(0)
        b = CByte(255 * (4 * temp + 0.5))
    ElseIf temp < 3 / 8 Then
        r = CByte(0)
        g = CByte(255 * (4 * temp - 0.5))
        b = CByte(255)
    ElseIf temp < 5 / 8 Then
        r = CByte(255 * (4 * temp - 1.5))
        g = CByte(255)
        b = CByte(255 * (2.5 - 4 * temp))
    ElseIf temp < 7 / 8 Then
        r = CByte(255)
        g = CByte(255 * (3.5 - 4 * temp))
        b = CByte(0)
    Else
        r = CByte(255 * (4.5 - 4 * temp))
        g = CByte(0)
        b = CByte(0)
    End If
End Sub

Private Sub jet2rgb2(value As Byte, ByRef r As Byte, ByRef g As Byte, ByRef b As Byte)
    If value < 256 / 3 Then
        r = CByte(0)
        g = CByte(255 * Math.Sin(PI * value / 255))
        b = CByte(255 * Math.Sin(PI * value / 255 + PI / 3))
    ElseIf value < 512 / 3 Then
        r = CByte(255 * Math.Sin(PI * value / 255 - PI / 3))
        g = CByte(255 * Math.Sin(PI * value / 255))
        b = CByte(255 * Math.Sin(PI * value / 255 + PI / 3))
    Else
        r = CByte(255 * Math.Sin(PI * value / 255 - PI / 3))
        g = CByte(255 * Math.Sin(PI * value / 255))
        b = CByte(0)
    End If
End Sub

'ペイントを呼び出す
Public Sub shell_paint()
    Dim id As Long
    id = Shell("mspaint.exe map.bmp", vbNormalFocus)
End Sub

'Bitmapを描画 (24bitフルカラーのみ対応)
Private Sub writeBitmap(filename As String, imgData() As Byte, width As Long, height As Long)
 
    'バイナリファイルに書き込む
    Open filename For Binary As 1
        Put 1, , "BM"
        Put 1, , CLng(3) * width * height + 54
        Put 1, , CInt(0)
        Put 1, , CInt(0)
        Put 1, , CLng(54)
     
        Put 1, , CLng(40)
        Put 1, , CLng(width)
        Put 1, , CLng(height)
        Put 1, , CInt(1)
        Put 1, , CInt(24)
        Put 1, , CLng(0)
        Put 1, , CLng(3) * width * height
        Put 1, , CLng(0)
        Put 1, , CLng(0)
        Put 1, , CLng(0)
        Put 1, , CLng(0)
     
        '画像データ
        Put 1, , imgData
    Close 1
End Sub

'フォントのビットマップデータ
Private Sub createFont()
    ReDim fnt(16 * 96 - 1) As Byte

    fnt(0) = 0: fnt(1) = 0: fnt(2) = 0: fnt(3) = 0: fnt(4) = 0: fnt(5) = 0: fnt(6) = 0: fnt(7) = 0: fnt(8) = 0: fnt(9) = 0: fnt(10) = 0: fnt(11) = 0: fnt(12) = 0: fnt(13) = 0: fnt(14) = 0: fnt(15) = 0
    fnt(16) = 0: fnt(17) = 0: fnt(18) = 24: fnt(19) = 24: fnt(20) = 0: fnt(21) = 0: fnt(22) = 8: fnt(23) = 8: fnt(24) = 8: fnt(25) = 8: fnt(26) = 8: fnt(27) = 8: fnt(28) = 8: fnt(29) = 8: fnt(30) = 8: fnt(31) = 0
    fnt(32) = 0: fnt(33) = 0: fnt(34) = 0: fnt(35) = 0: fnt(36) = 0: fnt(37) = 0: fnt(38) = 0: fnt(39) = 0: fnt(40) = 0: fnt(41) = 0: fnt(42) = 0: fnt(43) = 0: fnt(44) = 0: fnt(45) = 18: fnt(46) = 36: fnt(47) = 108
    fnt(48) = 0: fnt(49) = 18: fnt(50) = 18: fnt(51) = 18: fnt(52) = 18: fnt(53) = 63: fnt(54) = 18: fnt(55) = 18: fnt(56) = 18: fnt(57) = 18: fnt(58) = 127: fnt(59) = 36: fnt(60) = 36: fnt(61) = 36: fnt(62) = 36: fnt(63) = 0
    fnt(64) = 0: fnt(65) = 8: fnt(66) = 28: fnt(67) = 42: fnt(68) = 73: fnt(69) = 73: fnt(70) = 72: fnt(71) = 40: fnt(72) = 24: fnt(73) = 12: fnt(74) = 10: fnt(75) = 73: fnt(76) = 73: fnt(77) = 42: fnt(78) = 28: fnt(79) = 8
    fnt(80) = 0: fnt(81) = 0: fnt(82) = 49: fnt(83) = 73: fnt(84) = 74: fnt(85) = 74: fnt(86) = 52: fnt(87) = 4: fnt(88) = 8: fnt(89) = 16: fnt(90) = 22: fnt(91) = 41: fnt(92) = 41: fnt(93) = 73: fnt(94) = 70: fnt(95) = 0
    fnt(96) = 0: fnt(97) = 0: fnt(98) = 70: fnt(99) = 41: fnt(100) = 17: fnt(101) = 17: fnt(102) = 41: fnt(103) = 42: fnt(104) = 4: fnt(105) = 12: fnt(106) = 18: fnt(107) = 18: fnt(108) = 18: fnt(109) = 18: fnt(110) = 12: fnt(111) = 0
    fnt(112) = 0: fnt(113) = 0: fnt(114) = 0: fnt(115) = 0: fnt(116) = 0: fnt(117) = 0: fnt(118) = 0: fnt(119) = 0: fnt(120) = 0: fnt(121) = 0: fnt(122) = 0: fnt(123) = 0: fnt(124) = 4: fnt(125) = 8: fnt(126) = 12: fnt(127) = 12
    fnt(128) = 0: fnt(129) = 32: fnt(130) = 16: fnt(131) = 8: fnt(132) = 8: fnt(133) = 4: fnt(134) = 4: fnt(135) = 4: fnt(136) = 4: fnt(137) = 4: fnt(138) = 4: fnt(139) = 4: fnt(140) = 8: fnt(141) = 8: fnt(142) = 16: fnt(143) = 64
    fnt(144) = 0: fnt(145) = 2: fnt(146) = 4: fnt(147) = 8: fnt(148) = 8: fnt(149) = 16: fnt(150) = 16: fnt(151) = 16: fnt(152) = 16: fnt(153) = 16: fnt(154) = 16: fnt(155) = 16: fnt(156) = 8: fnt(157) = 8: fnt(158) = 4: fnt(159) = 4
    fnt(160) = 0: fnt(161) = 0: fnt(162) = 0: fnt(163) = 0: fnt(164) = 8: fnt(165) = 73: fnt(166) = 42: fnt(167) = 28: fnt(168) = 8: fnt(169) = 28: fnt(170) = 42: fnt(171) = 73: fnt(172) = 8: fnt(173) = 0: fnt(174) = 0: fnt(175) = 0
    fnt(176) = 0: fnt(177) = 0: fnt(178) = 0: fnt(179) = 0: fnt(180) = 0: fnt(181) = 8: fnt(182) = 8: fnt(183) = 8: fnt(184) = 127: fnt(185) = 8: fnt(186) = 8: fnt(187) = 8: fnt(188) = 0: fnt(189) = 0: fnt(190) = 0: fnt(191) = 0
    fnt(192) = 0: fnt(193) = 4: fnt(194) = 8: fnt(195) = 12: fnt(196) = 12: fnt(197) = 0: fnt(198) = 0: fnt(199) = 0: fnt(200) = 0: fnt(201) = 0: fnt(202) = 0: fnt(203) = 0: fnt(204) = 0: fnt(205) = 0: fnt(206) = 0: fnt(207) = 0
    fnt(208) = 0: fnt(209) = 0: fnt(210) = 0: fnt(211) = 0: fnt(212) = 0: fnt(213) = 0: fnt(214) = 0: fnt(215) = 0: fnt(216) = 62: fnt(217) = 0: fnt(218) = 0: fnt(219) = 0: fnt(220) = 0: fnt(221) = 0: fnt(222) = 0: fnt(223) = 0
    fnt(224) = 0: fnt(225) = 0: fnt(226) = 12: fnt(227) = 12: fnt(228) = 0: fnt(229) = 0: fnt(230) = 0: fnt(231) = 0: fnt(232) = 0: fnt(233) = 0: fnt(234) = 0: fnt(235) = 0: fnt(236) = 0: fnt(237) = 0: fnt(238) = 0: fnt(239) = 0
    fnt(240) = 0: fnt(241) = 0: fnt(242) = 1: fnt(243) = 1: fnt(244) = 2: fnt(245) = 2: fnt(246) = 4: fnt(247) = 4: fnt(248) = 8: fnt(249) = 16: fnt(250) = 16: fnt(251) = 32: fnt(252) = 32: fnt(253) = 64: fnt(254) = 64: fnt(255) = 0
    fnt(256) = 0: fnt(257) = 0: fnt(258) = 12: fnt(259) = 18: fnt(260) = 33: fnt(261) = 33: fnt(262) = 33: fnt(263) = 33: fnt(264) = 33: fnt(265) = 33: fnt(266) = 33: fnt(267) = 33: fnt(268) = 33: fnt(269) = 18: fnt(270) = 12: fnt(271) = 0
    fnt(272) = 0: fnt(273) = 0: fnt(274) = 8: fnt(275) = 8: fnt(276) = 8: fnt(277) = 8: fnt(278) = 8: fnt(279) = 8: fnt(280) = 8: fnt(281) = 8: fnt(282) = 8: fnt(283) = 8: fnt(284) = 8: fnt(285) = 14: fnt(286) = 8: fnt(287) = 0
    fnt(288) = 0: fnt(289) = 0: fnt(290) = 63: fnt(291) = 1: fnt(292) = 2: fnt(293) = 4: fnt(294) = 4: fnt(295) = 8: fnt(296) = 16: fnt(297) = 16: fnt(298) = 32: fnt(299) = 33: fnt(300) = 33: fnt(301) = 18: fnt(302) = 12: fnt(303) = 0
    fnt(304) = 0: fnt(305) = 0: fnt(306) = 12: fnt(307) = 18: fnt(308) = 33: fnt(309) = 33: fnt(310) = 32: fnt(311) = 16: fnt(312) = 12: fnt(313) = 16: fnt(314) = 32: fnt(315) = 33: fnt(316) = 33: fnt(317) = 18: fnt(318) = 12: fnt(319) = 0
    fnt(320) = 0: fnt(321) = 0: fnt(322) = 16: fnt(323) = 16: fnt(324) = 16: fnt(325) = 63: fnt(326) = 17: fnt(327) = 18: fnt(328) = 18: fnt(329) = 20: fnt(330) = 20: fnt(331) = 24: fnt(332) = 24: fnt(333) = 16: fnt(334) = 16: fnt(335) = 0
    fnt(336) = 0: fnt(337) = 0: fnt(338) = 12: fnt(339) = 18: fnt(340) = 33: fnt(341) = 32: fnt(342) = 32: fnt(343) = 32: fnt(344) = 33: fnt(345) = 19: fnt(346) = 13: fnt(347) = 1: fnt(348) = 1: fnt(349) = 1: fnt(350) = 63: fnt(351) = 0
    fnt(352) = 0: fnt(353) = 0: fnt(354) = 12: fnt(355) = 18: fnt(356) = 33: fnt(357) = 33: fnt(358) = 33: fnt(359) = 33: fnt(360) = 19: fnt(361) = 13: fnt(362) = 1: fnt(363) = 33: fnt(364) = 33: fnt(365) = 18: fnt(366) = 12: fnt(367) = 0
    fnt(368) = 0: fnt(369) = 0: fnt(370) = 4: fnt(371) = 4: fnt(372) = 4: fnt(373) = 4: fnt(374) = 8: fnt(375) = 8: fnt(376) = 8: fnt(377) = 16: fnt(378) = 16: fnt(379) = 16: fnt(380) = 32: fnt(381) = 32: fnt(382) = 63: fnt(383) = 0
    fnt(384) = 0: fnt(385) = 0: fnt(386) = 12: fnt(387) = 18: fnt(388) = 33: fnt(389) = 33: fnt(390) = 33: fnt(391) = 18: fnt(392) = 12: fnt(393) = 18: fnt(394) = 33: fnt(395) = 33: fnt(396) = 33: fnt(397) = 18: fnt(398) = 12: fnt(399) = 0
    fnt(400) = 0: fnt(401) = 0: fnt(402) = 12: fnt(403) = 18: fnt(404) = 33: fnt(405) = 33: fnt(406) = 32: fnt(407) = 44: fnt(408) = 50: fnt(409) = 33: fnt(410) = 33: fnt(411) = 33: fnt(412) = 33: fnt(413) = 18: fnt(414) = 12: fnt(415) = 0
    fnt(416) = 0: fnt(417) = 0: fnt(418) = 0: fnt(419) = 12: fnt(420) = 12: fnt(421) = 0: fnt(422) = 0: fnt(423) = 0: fnt(424) = 0: fnt(425) = 12: fnt(426) = 12: fnt(427) = 0: fnt(428) = 0: fnt(429) = 0: fnt(430) = 0: fnt(431) = 0
    fnt(432) = 0: fnt(433) = 4: fnt(434) = 8: fnt(435) = 12: fnt(436) = 12: fnt(437) = 0: fnt(438) = 0: fnt(439) = 0: fnt(440) = 0: fnt(441) = 12: fnt(442) = 12: fnt(443) = 0: fnt(444) = 0: fnt(445) = 0: fnt(446) = 0: fnt(447) = 0
    fnt(448) = 0: fnt(449) = 0: fnt(450) = 0: fnt(451) = 32: fnt(452) = 16: fnt(453) = 8: fnt(454) = 4: fnt(455) = 2: fnt(456) = 1: fnt(457) = 2: fnt(458) = 4: fnt(459) = 8: fnt(460) = 16: fnt(461) = 32: fnt(462) = 0: fnt(463) = 0
    fnt(464) = 0: fnt(465) = 0: fnt(466) = 0: fnt(467) = 0: fnt(468) = 0: fnt(469) = 0: fnt(470) = 62: fnt(471) = 0: fnt(472) = 0: fnt(473) = 0: fnt(474) = 62: fnt(475) = 0: fnt(476) = 0: fnt(477) = 0: fnt(478) = 0: fnt(479) = 0
    fnt(480) = 0: fnt(481) = 0: fnt(482) = 0: fnt(483) = 1: fnt(484) = 2: fnt(485) = 4: fnt(486) = 8: fnt(487) = 16: fnt(488) = 32: fnt(489) = 16: fnt(490) = 8: fnt(491) = 4: fnt(492) = 2: fnt(493) = 1: fnt(494) = 0: fnt(495) = 0
    fnt(496) = 0: fnt(497) = 0: fnt(498) = 12: fnt(499) = 12: fnt(500) = 0: fnt(501) = 0: fnt(502) = 4: fnt(503) = 4: fnt(504) = 8: fnt(505) = 16: fnt(506) = 32: fnt(507) = 33: fnt(508) = 33: fnt(509) = 18: fnt(510) = 12: fnt(511) = 0
    fnt(512) = 0: fnt(513) = 0: fnt(514) = 60: fnt(515) = 66: fnt(516) = 1: fnt(517) = 57: fnt(518) = 85: fnt(519) = 85: fnt(520) = 85: fnt(521) = 85: fnt(522) = 85: fnt(523) = 89: fnt(524) = 65: fnt(525) = 34: fnt(526) = 28: fnt(527) = 0
    fnt(528) = 0: fnt(529) = 0: fnt(530) = 65: fnt(531) = 65: fnt(532) = 65: fnt(533) = 62: fnt(534) = 34: fnt(535) = 34: fnt(536) = 34: fnt(537) = 20: fnt(538) = 20: fnt(539) = 20: fnt(540) = 20: fnt(541) = 8: fnt(542) = 8: fnt(543) = 0
    fnt(544) = 0: fnt(545) = 0: fnt(546) = 31: fnt(547) = 33: fnt(548) = 65: fnt(549) = 65: fnt(550) = 65: fnt(551) = 33: fnt(552) = 31: fnt(553) = 33: fnt(554) = 65: fnt(555) = 65: fnt(556) = 65: fnt(557) = 33: fnt(558) = 31: fnt(559) = 0
    fnt(560) = 0: fnt(561) = 0: fnt(562) = 28: fnt(563) = 34: fnt(564) = 65: fnt(565) = 65: fnt(566) = 1: fnt(567) = 1: fnt(568) = 1: fnt(569) = 1: fnt(570) = 1: fnt(571) = 65: fnt(572) = 65: fnt(573) = 34: fnt(574) = 28: fnt(575) = 0
    fnt(576) = 0: fnt(577) = 0: fnt(578) = 31: fnt(579) = 33: fnt(580) = 65: fnt(581) = 65: fnt(582) = 65: fnt(583) = 65: fnt(584) = 65: fnt(585) = 65: fnt(586) = 65: fnt(587) = 65: fnt(588) = 65: fnt(589) = 33: fnt(590) = 31: fnt(591) = 0
    fnt(592) = 0: fnt(593) = 0: fnt(594) = 127: fnt(595) = 1: fnt(596) = 1: fnt(597) = 1: fnt(598) = 1: fnt(599) = 1: fnt(600) = 63: fnt(601) = 1: fnt(602) = 1: fnt(603) = 1: fnt(604) = 1: fnt(605) = 1: fnt(606) = 127: fnt(607) = 0
    fnt(608) = 0: fnt(609) = 0: fnt(610) = 1: fnt(611) = 1: fnt(612) = 1: fnt(613) = 1: fnt(614) = 1: fnt(615) = 1: fnt(616) = 63: fnt(617) = 1: fnt(618) = 1: fnt(619) = 1: fnt(620) = 1: fnt(621) = 1: fnt(622) = 127: fnt(623) = 0
    fnt(624) = 0: fnt(625) = 0: fnt(626) = 92: fnt(627) = 98: fnt(628) = 65: fnt(629) = 65: fnt(630) = 65: fnt(631) = 113: fnt(632) = 1: fnt(633) = 1: fnt(634) = 1: fnt(635) = 65: fnt(636) = 65: fnt(637) = 34: fnt(638) = 28: fnt(639) = 0
    fnt(640) = 0: fnt(641) = 0: fnt(642) = 65: fnt(643) = 65: fnt(644) = 65: fnt(645) = 65: fnt(646) = 65: fnt(647) = 65: fnt(648) = 127: fnt(649) = 65: fnt(650) = 65: fnt(651) = 65: fnt(652) = 65: fnt(653) = 65: fnt(654) = 65: fnt(655) = 0
    fnt(656) = 0: fnt(657) = 0: fnt(658) = 28: fnt(659) = 8: fnt(660) = 8: fnt(661) = 8: fnt(662) = 8: fnt(663) = 8: fnt(664) = 8: fnt(665) = 8: fnt(666) = 8: fnt(667) = 8: fnt(668) = 8: fnt(669) = 8: fnt(670) = 28: fnt(671) = 0
    fnt(672) = 0: fnt(673) = 0: fnt(674) = 12: fnt(675) = 18: fnt(676) = 33: fnt(677) = 33: fnt(678) = 32: fnt(679) = 32: fnt(680) = 32: fnt(681) = 32: fnt(682) = 32: fnt(683) = 32: fnt(684) = 32: fnt(685) = 32: fnt(686) = 32: fnt(687) = 0
    fnt(688) = 0: fnt(689) = 0: fnt(690) = 65: fnt(691) = 65: fnt(692) = 33: fnt(693) = 17: fnt(694) = 17: fnt(695) = 11: fnt(696) = 5: fnt(697) = 9: fnt(698) = 9: fnt(699) = 17: fnt(700) = 33: fnt(701) = 33: fnt(702) = 65: fnt(703) = 0
    fnt(704) = 0: fnt(705) = 0: fnt(706) = 127: fnt(707) = 1: fnt(708) = 1: fnt(709) = 1: fnt(710) = 1: fnt(711) = 1: fnt(712) = 1: fnt(713) = 1: fnt(714) = 1: fnt(715) = 1: fnt(716) = 1: fnt(717) = 1: fnt(718) = 1: fnt(719) = 0
    fnt(720) = 0: fnt(721) = 0: fnt(722) = 73: fnt(723) = 73: fnt(724) = 73: fnt(725) = 85: fnt(726) = 85: fnt(727) = 85: fnt(728) = 85: fnt(729) = 99: fnt(730) = 99: fnt(731) = 99: fnt(732) = 99: fnt(733) = 65: fnt(734) = 65: fnt(735) = 0
    fnt(736) = 0: fnt(737) = 0: fnt(738) = 65: fnt(739) = 97: fnt(740) = 97: fnt(741) = 81: fnt(742) = 81: fnt(743) = 73: fnt(744) = 73: fnt(745) = 69: fnt(746) = 69: fnt(747) = 67: fnt(748) = 67: fnt(749) = 65: fnt(750) = 65: fnt(751) = 0
    fnt(752) = 0: fnt(753) = 0: fnt(754) = 28: fnt(755) = 34: fnt(756) = 65: fnt(757) = 65: fnt(758) = 65: fnt(759) = 65: fnt(760) = 65: fnt(761) = 65: fnt(762) = 65: fnt(763) = 65: fnt(764) = 65: fnt(765) = 34: fnt(766) = 28: fnt(767) = 0
    fnt(768) = 0: fnt(769) = 0: fnt(770) = 1: fnt(771) = 1: fnt(772) = 1: fnt(773) = 1: fnt(774) = 1: fnt(775) = 1: fnt(776) = 31: fnt(777) = 33: fnt(778) = 65: fnt(779) = 65: fnt(780) = 65: fnt(781) = 33: fnt(782) = 31: fnt(783) = 0
    fnt(784) = 0: fnt(785) = 0: fnt(786) = 92: fnt(787) = 34: fnt(788) = 81: fnt(789) = 73: fnt(790) = 65: fnt(791) = 65: fnt(792) = 65: fnt(793) = 65: fnt(794) = 65: fnt(795) = 65: fnt(796) = 65: fnt(797) = 34: fnt(798) = 28: fnt(799) = 0
    fnt(800) = 0: fnt(801) = 0: fnt(802) = 65: fnt(803) = 65: fnt(804) = 33: fnt(805) = 33: fnt(806) = 17: fnt(807) = 17: fnt(808) = 31: fnt(809) = 33: fnt(810) = 65: fnt(811) = 65: fnt(812) = 65: fnt(813) = 33: fnt(814) = 31: fnt(815) = 0
    fnt(816) = 0: fnt(817) = 0: fnt(818) = 28: fnt(819) = 34: fnt(820) = 65: fnt(821) = 65: fnt(822) = 64: fnt(823) = 32: fnt(824) = 24: fnt(825) = 6: fnt(826) = 1: fnt(827) = 65: fnt(828) = 65: fnt(829) = 34: fnt(830) = 28: fnt(831) = 0
    fnt(832) = 0: fnt(833) = 0: fnt(834) = 8: fnt(835) = 8: fnt(836) = 8: fnt(837) = 8: fnt(838) = 8: fnt(839) = 8: fnt(840) = 8: fnt(841) = 8: fnt(842) = 8: fnt(843) = 8: fnt(844) = 8: fnt(845) = 8: fnt(846) = 127: fnt(847) = 0
    fnt(848) = 0: fnt(849) = 0: fnt(850) = 28: fnt(851) = 34: fnt(852) = 65: fnt(853) = 65: fnt(854) = 65: fnt(855) = 65: fnt(856) = 65: fnt(857) = 65: fnt(858) = 65: fnt(859) = 65: fnt(860) = 65: fnt(861) = 65: fnt(862) = 65: fnt(863) = 0
    fnt(864) = 0: fnt(865) = 0: fnt(866) = 8: fnt(867) = 8: fnt(868) = 8: fnt(869) = 20: fnt(870) = 20: fnt(871) = 20: fnt(872) = 34: fnt(873) = 34: fnt(874) = 34: fnt(875) = 34: fnt(876) = 65: fnt(877) = 65: fnt(878) = 65: fnt(879) = 0
    fnt(880) = 0: fnt(881) = 0: fnt(882) = 34: fnt(883) = 34: fnt(884) = 34: fnt(885) = 34: fnt(886) = 34: fnt(887) = 85: fnt(888) = 85: fnt(889) = 85: fnt(890) = 85: fnt(891) = 73: fnt(892) = 73: fnt(893) = 73: fnt(894) = 73: fnt(895) = 0
    fnt(896) = 0: fnt(897) = 0: fnt(898) = 65: fnt(899) = 65: fnt(900) = 34: fnt(901) = 34: fnt(902) = 20: fnt(903) = 20: fnt(904) = 8: fnt(905) = 20: fnt(906) = 20: fnt(907) = 34: fnt(908) = 34: fnt(909) = 65: fnt(910) = 65: fnt(911) = 0
    fnt(912) = 0: fnt(913) = 0: fnt(914) = 8: fnt(915) = 8: fnt(916) = 8: fnt(917) = 8: fnt(918) = 8: fnt(919) = 8: fnt(920) = 8: fnt(921) = 20: fnt(922) = 20: fnt(923) = 34: fnt(924) = 34: fnt(925) = 65: fnt(926) = 65: fnt(927) = 0
    fnt(928) = 0: fnt(929) = 0: fnt(930) = 127: fnt(931) = 1: fnt(932) = 2: fnt(933) = 2: fnt(934) = 4: fnt(935) = 4: fnt(936) = 8: fnt(937) = 16: fnt(938) = 16: fnt(939) = 32: fnt(940) = 32: fnt(941) = 64: fnt(942) = 127: fnt(943) = 0
    fnt(944) = 0: fnt(945) = 62: fnt(946) = 2: fnt(947) = 2: fnt(948) = 2: fnt(949) = 2: fnt(950) = 2: fnt(951) = 2: fnt(952) = 2: fnt(953) = 2: fnt(954) = 2: fnt(955) = 2: fnt(956) = 2: fnt(957) = 2: fnt(958) = 2: fnt(959) = 62
    fnt(960) = 0: fnt(961) = 0: fnt(962) = 8: fnt(963) = 8: fnt(964) = 8: fnt(965) = 62: fnt(966) = 8: fnt(967) = 8: fnt(968) = 62: fnt(969) = 20: fnt(970) = 20: fnt(971) = 34: fnt(972) = 34: fnt(973) = 65: fnt(974) = 65: fnt(975) = 0
    fnt(976) = 0: fnt(977) = 62: fnt(978) = 32: fnt(979) = 32: fnt(980) = 32: fnt(981) = 32: fnt(982) = 32: fnt(983) = 32: fnt(984) = 32: fnt(985) = 32: fnt(986) = 32: fnt(987) = 32: fnt(988) = 32: fnt(989) = 32: fnt(990) = 32: fnt(991) = 62
    fnt(992) = 0: fnt(993) = 0: fnt(994) = 0: fnt(995) = 0: fnt(996) = 0: fnt(997) = 0: fnt(998) = 0: fnt(999) = 0: fnt(1000) = 0: fnt(1001) = 0: fnt(1002) = 0: fnt(1003) = 0: fnt(1004) = 0: fnt(1005) = 34: fnt(1006) = 20: fnt(1007) = 8
    fnt(1008) = 255: fnt(1009) = 0: fnt(1010) = 0: fnt(1011) = 0: fnt(1012) = 0: fnt(1013) = 0: fnt(1014) = 0: fnt(1015) = 0: fnt(1016) = 0: fnt(1017) = 0: fnt(1018) = 0: fnt(1019) = 0: fnt(1020) = 0: fnt(1021) = 0: fnt(1022) = 0: fnt(1023) = 0
    fnt(1024) = 0: fnt(1025) = 0: fnt(1026) = 0: fnt(1027) = 0: fnt(1028) = 0: fnt(1029) = 0: fnt(1030) = 0: fnt(1031) = 0: fnt(1032) = 0: fnt(1033) = 0: fnt(1034) = 0: fnt(1035) = 0: fnt(1036) = 0: fnt(1037) = 16: fnt(1038) = 8: fnt(1039) = 4
    fnt(1040) = 0: fnt(1041) = 0: fnt(1042) = 110: fnt(1043) = 49: fnt(1044) = 33: fnt(1045) = 34: fnt(1046) = 60: fnt(1047) = 32: fnt(1048) = 33: fnt(1049) = 30: fnt(1050) = 0: fnt(1051) = 0: fnt(1052) = 0: fnt(1053) = 0: fnt(1054) = 0: fnt(1055) = 0
    fnt(1056) = 0: fnt(1057) = 0: fnt(1058) = 29: fnt(1059) = 35: fnt(1060) = 65: fnt(1061) = 65: fnt(1062) = 65: fnt(1063) = 65: fnt(1064) = 35: fnt(1065) = 29: fnt(1066) = 1: fnt(1067) = 1: fnt(1068) = 1: fnt(1069) = 1: fnt(1070) = 1: fnt(1071) = 0
    fnt(1072) = 0: fnt(1073) = 0: fnt(1074) = 60: fnt(1075) = 66: fnt(1076) = 1: fnt(1077) = 1: fnt(1078) = 1: fnt(1079) = 1: fnt(1080) = 66: fnt(1081) = 60: fnt(1082) = 0: fnt(1083) = 0: fnt(1084) = 0: fnt(1085) = 0: fnt(1086) = 0: fnt(1087) = 0
    fnt(1088) = 0: fnt(1089) = 0: fnt(1090) = 92: fnt(1091) = 98: fnt(1092) = 65: fnt(1093) = 65: fnt(1094) = 65: fnt(1095) = 65: fnt(1096) = 98: fnt(1097) = 92: fnt(1098) = 64: fnt(1099) = 64: fnt(1100) = 64: fnt(1101) = 64: fnt(1102) = 64: fnt(1103) = 0
    fnt(1104) = 0: fnt(1105) = 0: fnt(1106) = 60: fnt(1107) = 66: fnt(1108) = 1: fnt(1109) = 1: fnt(1110) = 127: fnt(1111) = 65: fnt(1112) = 34: fnt(1113) = 28: fnt(1114) = 0: fnt(1115) = 0: fnt(1116) = 0: fnt(1117) = 0: fnt(1118) = 0: fnt(1119) = 0
    fnt(1120) = 0: fnt(1121) = 0: fnt(1122) = 4: fnt(1123) = 4: fnt(1124) = 4: fnt(1125) = 4: fnt(1126) = 4: fnt(1127) = 4: fnt(1128) = 4: fnt(1129) = 31: fnt(1130) = 4: fnt(1131) = 4: fnt(1132) = 4: fnt(1133) = 4: fnt(1134) = 24: fnt(1135) = 0
    fnt(1136) = 0: fnt(1137) = 62: fnt(1138) = 65: fnt(1139) = 65: fnt(1140) = 62: fnt(1141) = 2: fnt(1142) = 28: fnt(1143) = 34: fnt(1144) = 34: fnt(1145) = 92: fnt(1146) = 0: fnt(1147) = 0: fnt(1148) = 0: fnt(1149) = 0: fnt(1150) = 0: fnt(1151) = 0
    fnt(1152) = 0: fnt(1153) = 0: fnt(1154) = 65: fnt(1155) = 65: fnt(1156) = 65: fnt(1157) = 65: fnt(1158) = 65: fnt(1159) = 65: fnt(1160) = 35: fnt(1161) = 29: fnt(1162) = 1: fnt(1163) = 1: fnt(1164) = 1: fnt(1165) = 1: fnt(1166) = 1: fnt(1167) = 0
    fnt(1168) = 0: fnt(1169) = 0: fnt(1170) = 8: fnt(1171) = 8: fnt(1172) = 8: fnt(1173) = 8: fnt(1174) = 8: fnt(1175) = 8: fnt(1176) = 8: fnt(1177) = 8: fnt(1178) = 0: fnt(1179) = 0: fnt(1180) = 8: fnt(1181) = 8: fnt(1182) = 0: fnt(1183) = 0
    fnt(1184) = 0: fnt(1185) = 6: fnt(1186) = 8: fnt(1187) = 8: fnt(1188) = 8: fnt(1189) = 8: fnt(1190) = 8: fnt(1191) = 8: fnt(1192) = 8: fnt(1193) = 8: fnt(1194) = 0: fnt(1195) = 0: fnt(1196) = 8: fnt(1197) = 8: fnt(1198) = 0: fnt(1199) = 0
    fnt(1200) = 0: fnt(1201) = 0: fnt(1202) = 65: fnt(1203) = 33: fnt(1204) = 17: fnt(1205) = 11: fnt(1206) = 5: fnt(1207) = 9: fnt(1208) = 17: fnt(1209) = 33: fnt(1210) = 1: fnt(1211) = 1: fnt(1212) = 1: fnt(1213) = 1: fnt(1214) = 1: fnt(1215) = 0
    fnt(1216) = 0: fnt(1217) = 0: fnt(1218) = 8: fnt(1219) = 8: fnt(1220) = 8: fnt(1221) = 8: fnt(1222) = 8: fnt(1223) = 8: fnt(1224) = 8: fnt(1225) = 8: fnt(1226) = 8: fnt(1227) = 8: fnt(1228) = 8: fnt(1229) = 8: fnt(1230) = 8: fnt(1231) = 0
    fnt(1232) = 0: fnt(1233) = 0: fnt(1234) = 73: fnt(1235) = 73: fnt(1236) = 73: fnt(1237) = 73: fnt(1238) = 73: fnt(1239) = 73: fnt(1240) = 75: fnt(1241) = 53: fnt(1242) = 0: fnt(1243) = 0: fnt(1244) = 0: fnt(1245) = 0: fnt(1246) = 0: fnt(1247) = 0
    fnt(1248) = 0: fnt(1249) = 0: fnt(1250) = 65: fnt(1251) = 65: fnt(1252) = 65: fnt(1253) = 65: fnt(1254) = 65: fnt(1255) = 65: fnt(1256) = 35: fnt(1257) = 29: fnt(1258) = 0: fnt(1259) = 0: fnt(1260) = 0: fnt(1261) = 0: fnt(1262) = 0: fnt(1263) = 0
    fnt(1264) = 0: fnt(1265) = 0: fnt(1266) = 28: fnt(1267) = 34: fnt(1268) = 65: fnt(1269) = 65: fnt(1270) = 65: fnt(1271) = 65: fnt(1272) = 34: fnt(1273) = 28: fnt(1274) = 0: fnt(1275) = 0: fnt(1276) = 0: fnt(1277) = 0: fnt(1278) = 0: fnt(1279) = 0
    fnt(1280) = 0: fnt(1281) = 1: fnt(1282) = 1: fnt(1283) = 29: fnt(1284) = 35: fnt(1285) = 65: fnt(1286) = 65: fnt(1287) = 65: fnt(1288) = 35: fnt(1289) = 29: fnt(1290) = 0: fnt(1291) = 0: fnt(1292) = 0: fnt(1293) = 0: fnt(1294) = 0: fnt(1295) = 0
    fnt(1296) = 0: fnt(1297) = 64: fnt(1298) = 64: fnt(1299) = 92: fnt(1300) = 98: fnt(1301) = 65: fnt(1302) = 65: fnt(1303) = 65: fnt(1304) = 98: fnt(1305) = 92: fnt(1306) = 0: fnt(1307) = 0: fnt(1308) = 0: fnt(1309) = 0: fnt(1310) = 0: fnt(1311) = 0
    fnt(1312) = 0: fnt(1313) = 0: fnt(1314) = 4: fnt(1315) = 4: fnt(1316) = 4: fnt(1317) = 4: fnt(1318) = 4: fnt(1319) = 4: fnt(1320) = 12: fnt(1321) = 116: fnt(1322) = 0: fnt(1323) = 0: fnt(1324) = 0: fnt(1325) = 0: fnt(1326) = 0: fnt(1327) = 0
    fnt(1328) = 0: fnt(1329) = 0: fnt(1330) = 62: fnt(1331) = 65: fnt(1332) = 64: fnt(1333) = 56: fnt(1334) = 6: fnt(1335) = 1: fnt(1336) = 65: fnt(1337) = 62: fnt(1338) = 0: fnt(1339) = 0: fnt(1340) = 0: fnt(1341) = 0: fnt(1342) = 0: fnt(1343) = 0
    fnt(1344) = 0: fnt(1345) = 0: fnt(1346) = 24: fnt(1347) = 4: fnt(1348) = 4: fnt(1349) = 4: fnt(1350) = 4: fnt(1351) = 4: fnt(1352) = 4: fnt(1353) = 31: fnt(1354) = 4: fnt(1355) = 4: fnt(1356) = 4: fnt(1357) = 4: fnt(1358) = 0: fnt(1359) = 0
    fnt(1360) = 0: fnt(1361) = 0: fnt(1362) = 92: fnt(1363) = 98: fnt(1364) = 65: fnt(1365) = 65: fnt(1366) = 65: fnt(1367) = 65: fnt(1368) = 65: fnt(1369) = 65: fnt(1370) = 0: fnt(1371) = 0: fnt(1372) = 0: fnt(1373) = 0: fnt(1374) = 0: fnt(1375) = 0
    fnt(1376) = 0: fnt(1377) = 0: fnt(1378) = 8: fnt(1379) = 8: fnt(1380) = 20: fnt(1381) = 20: fnt(1382) = 34: fnt(1383) = 34: fnt(1384) = 65: fnt(1385) = 65: fnt(1386) = 0: fnt(1387) = 0: fnt(1388) = 0: fnt(1389) = 0: fnt(1390) = 0: fnt(1391) = 0
    fnt(1392) = 0: fnt(1393) = 0: fnt(1394) = 34: fnt(1395) = 34: fnt(1396) = 34: fnt(1397) = 85: fnt(1398) = 85: fnt(1399) = 73: fnt(1400) = 73: fnt(1401) = 73: fnt(1402) = 0: fnt(1403) = 0: fnt(1404) = 0: fnt(1405) = 0: fnt(1406) = 0: fnt(1407) = 0
    fnt(1408) = 0: fnt(1409) = 0: fnt(1410) = 65: fnt(1411) = 34: fnt(1412) = 20: fnt(1413) = 8: fnt(1414) = 8: fnt(1415) = 20: fnt(1416) = 34: fnt(1417) = 65: fnt(1418) = 0: fnt(1419) = 0: fnt(1420) = 0: fnt(1421) = 0: fnt(1422) = 0: fnt(1423) = 0
    fnt(1424) = 0: fnt(1425) = 3: fnt(1426) = 4: fnt(1427) = 8: fnt(1428) = 20: fnt(1429) = 20: fnt(1430) = 34: fnt(1431) = 34: fnt(1432) = 65: fnt(1433) = 65: fnt(1434) = 0: fnt(1435) = 0: fnt(1436) = 0: fnt(1437) = 0: fnt(1438) = 0: fnt(1439) = 0
    fnt(1440) = 0: fnt(1441) = 0: fnt(1442) = 127: fnt(1443) = 1: fnt(1444) = 2: fnt(1445) = 4: fnt(1446) = 8: fnt(1447) = 16: fnt(1448) = 32: fnt(1449) = 127: fnt(1450) = 0: fnt(1451) = 0: fnt(1452) = 0: fnt(1453) = 0: fnt(1454) = 0: fnt(1455) = 0
    fnt(1456) = 0: fnt(1457) = 56: fnt(1458) = 8: fnt(1459) = 8: fnt(1460) = 8: fnt(1461) = 8: fnt(1462) = 8: fnt(1463) = 8: fnt(1464) = 4: fnt(1465) = 8: fnt(1466) = 8: fnt(1467) = 8: fnt(1468) = 8: fnt(1469) = 8: fnt(1470) = 8: fnt(1471) = 56
    fnt(1472) = 8: fnt(1473) = 8: fnt(1474) = 8: fnt(1475) = 8: fnt(1476) = 8: fnt(1477) = 8: fnt(1478) = 8: fnt(1479) = 8: fnt(1480) = 8: fnt(1481) = 8: fnt(1482) = 8: fnt(1483) = 8: fnt(1484) = 8: fnt(1485) = 8: fnt(1486) = 8: fnt(1487) = 8
    fnt(1488) = 0: fnt(1489) = 14: fnt(1490) = 8: fnt(1491) = 8: fnt(1492) = 8: fnt(1493) = 8: fnt(1494) = 8: fnt(1495) = 8: fnt(1496) = 16: fnt(1497) = 8: fnt(1498) = 8: fnt(1499) = 8: fnt(1500) = 8: fnt(1501) = 8: fnt(1502) = 8: fnt(1503) = 14
    fnt(1504) = 0: fnt(1505) = 0: fnt(1506) = 0: fnt(1507) = 0: fnt(1508) = 0: fnt(1509) = 0: fnt(1510) = 0: fnt(1511) = 0: fnt(1512) = 0: fnt(1513) = 0: fnt(1514) = 0: fnt(1515) = 0: fnt(1516) = 0: fnt(1517) = 0: fnt(1518) = 25: fnt(1519) = 38
    fnt(1520) = 0: fnt(1521) = 0: fnt(1522) = 0: fnt(1523) = 0: fnt(1524) = 0: fnt(1525) = 0: fnt(1526) = 0: fnt(1527) = 0: fnt(1528) = 0: fnt(1529) = 0: fnt(1530) = 0: fnt(1531) = 0: fnt(1532) = 0: fnt(1533) = 0: fnt(1534) = 0: fnt(1535) = 0

End Sub

パーキンソンの法則

 社会学に「パーキンソンの法則」というのがあります。「公務員は、お互いに仕事を作り出してしまうから、人数が増え続ける」というものです。無駄な手続きが増えて、仕事量が増えて、人員が必要になる、というのはありそうな話です。

 パーキンソンの法則は、公務員に限らず、一般の組織にも当てはまると思います。組織のヒトを遊ばせるわけにはいかないから、不必要かもしれない適当な仕事を与えておく。いつか使うかもしれないという理由で、使えそうなモノを集めると、それを管理する仕事が発生する。そんなこんなが続くと、仕事が増えて、人員が必要になり、組織は肥大化していきます。

 より一般的なパーキンソンの法則は、「ある資源への需要は可能な限り増大する」というものです。

 パソコンのメモリは、あればあるだけ使われます。データが多ければ検索に時間がかかって不便だとは知りつつも、築かれるのはいつも無駄なデータの山です。こういう場合、管理リストを作ろうとしても、リストの更新を忘れたりして、たいていうまくいきません。

 世の中には、増えるのは簡単で、減らすのは難しいことが色々あります。「明日から君の仕事はなくなるよ」なんて、なかなか言えないものです。ですが、増大する一方では、複雑化するだけです。パーキンソンの法則を意識して、無駄な仕事を増やさないように心がけたいものです。


参考:wikipedia

2015年4月4日土曜日

多数決と数の暴力

 多数決は民主的に集団の意思を決定する方法です。政治の世界だけでなく、ビジネスや学校などでも多数決で意思決定をすることは多いと思います。

 ところで、集団における賢さは正規分布をしているでしょう。つまり、極端に賢い人間や、極端に愚かな人間は少なく、大多数はそれなりに賢く、それなりに愚かな人間です。

 ということは、極端に賢い人間が考えた賢い意見というのは少数派です。少数派の意見は、多数決により否定される可能性があります。残念ながら、大多数の人間が賢い意見を理解するとは限りません。(これは、いわゆる民主主義の弊害というやつです。)

 賢い意見が採用されないなら、その意見を提案した人はどう思うでしょうか?
私は極端に賢い少数派ではありませんが、それでも、一生懸命考えて、いい意見を提案したのに、採用されなかったら、落ち込みます。打ちひしがれます。
多数決は、賢い意見を提案した人の心を傷つける可能性があると思います。まさに数の暴力です。

 こういった数の暴力で、賢い人間の心が傷つけられ、加えて集団が賢い意見を採用しないというのでは、何もいいことがありません。数の暴力による失敗を起こさないために、少数派の意見でもそれを正当に評価できるよう、私達、個々人が、賢くならなければいけないのだと思います。


・・・なんてことを、ふと思いました。


参考:wikipedia 多数決

2015年3月29日日曜日

少しロマンチックな数学の話 (その2)

 「微分」 とは変化を解析する数学です。
 例えば1日の気温の変化のデータがあったとします。このとき 「10:00~10:01まで1分間に気温が0.1℃上昇した」 といった変化を考えるのが微分です。
 厳密には、 「1分間」 のところを 「無限に短い時間」 とするのが数学のやり方です。実際には、測定間隔を 「無限に短く」 することはできないので、「考えている問題に対して十分短い時間」 とするのが物理学のやり方です。微分のポイントは、「ある小さい時間 (空間) 内の変化を解析する」 ことです。

 一般に物理学では、自然法則を 「微分が従う数式」 として表現します。小さい時間 (空間) での変化を表す数式が、物理学が教える自然法則です。最終的な自然現象は、小さい時間 (空間) での変化を積み重ねることで得られます。例えば、短い時間の気温の変化を表す数式が自然法則で、それを積み重ねれば、1日の気温の変化が得られます。

 小さい時間 (空間) において、自然にとって都合の良い変化を積み重ねると、最終的な自然現象が得られます。これを人間に応用すると、自分の周囲において、都合の良い行動をするのが 「自然な生き方」 と言えます。
  「10年後のために何をしておこうか?」 とか、 「遠くのAさんはどう考えているだろう?」 とか、自分から離れたことについて悩むことはよくあります。ですが、たまには自然のやり方に従って、自分の周囲の都合だけ考えてみるのも良いかも知れません。私は身近なことだけ考慮することを 「微分的」 と勝手に呼んでます。


 もちろん、今の自分に都合がいいように遊んでばかりいると、キリギリスさんになってしまいます orz

2015年3月22日日曜日

少しロマンチックな数学の話

 数学には「無限」という概念があります。「無限」とは「どんな数よりも大きな数」のことです。

 1,000,000 と無限では、無限の方が大きいです。1,000,000,000 と無限でも、無限の方が大きいです。仮に地球上の原子の総数を数えられたとしても、無限はそれより大きいです。あなたがどんな数を持ってきたとしても、無限はそれより大きいです。無限とは、「ある固定された数字」ではなく、「どんな比較対象よりも大きい」という、動的な概念を意味しています。

 「1, 1, 1, -2, 1, 1, 1, -2, 1, ...」という数列 a_n を考えてみます。この数列の第 n 項までの総和の数列 s_n = a_1 + a_2 + ... + a_nは、n が大きくなるとともに少しずつ増加して、無限大に発散します。数列の項は無限に続くので、少しずつの和でも、s_n はどこまでも大きくなっていきます。「1日1歩、3日で3歩、3歩進んで2歩下がる」という歌がありますが、結果的には、無限に成長していくことになります。努力の積み重ねが大事ということですね (^o^)b

 「永遠の愛」なんてセリフがありますが、これは無限の愛と言ってもいいでしょう。たまにけんかしても、永遠に愛を積み重ねるなら、それは無限になります。大事なのは、積み重ねていくということです。

 まぁ、神様に永遠の愛を誓っても、有限で終わってしまう例も多いみたいですが  orz

財政試算

 インターネットが普及したおかげで、様々な統計データを手軽に利用できるようになりました。気まぐれに、統計データで遊んでみようと思います。

 まず、日本の人口統計を見てみます。日本の総人口は 約1億2700万人 です。そのうち65歳以上の方が 約3200万人、70歳以上の方が 約2300万人 います。ちなみに、20歳未満の方は 約2200万人 です。高齢者が多いのは一目瞭然です。

 70歳以上の方の総数から、年金の総額を推定してみます。70歳以上の方すべてが年間100万円の年金を支給されていたとすると、その総額は 約23兆円 です。70歳以上で年間100万円というのは、かなり適当な値ですが、オーダーはこんなものでしょう。

 次に日本の公務員の人数を見てみます。日本の国家公務員は 約60万人、地方公務員は 約300万人 だそうです。年間300万円の給料だとすると、公務員の給料の総額は 約10兆円 です。もちろん年間300万円の見積もりはかなり少ないでしょうが、オーダーはこんなものでしょう。

 以上を踏まえて、日本の国家予算を見てみます。日本の国家予算は 約100兆円 です。

 国家予算の歳入のうち、税収は 約50兆円、残り 約50兆円 は公債です。毎年、税収と同じくらいの債券を発行しているというのは、素人の私には理解できない事態ですが、日本ではそういう状況が続いています。

 国家予算の歳出のうち 約30兆円 は社会保障です。さきほどの年金の推定値を考えると、社会保障というのはほとんど年金のことなのでしょう。歳出のうち、社会保障に次ぐのは、国債費の約23兆円 です。国債をあれだけ発行しているのだから、その返済が多いのは当然です。歳出には、防衛予算や科学振興、公共事業などなど他にもさまざまなものがあります。1項目あたり3兆円で、10項目あれば 約30兆円 です。この3つを合わせれば、国家予算の歳出のだいたいを占めていそうです。

 なお、公務員の給料は 約10兆円 と推定しましたが、これは歳出の1割くらいのはずです。多いか少ないかは、私には判断できません。政治的な発言はトラブルの元なので控えます。

 多くの方が苦労して作った統計データなのに、雑に扱ってすみません。でも、こういう計算をして、国家予算について考えてみるのも悪くはないのではないでしょうか。




参考:wikipedia人口統計wikipedia公務員財務省

2015年3月8日日曜日

あいまいな表現

 私は、「MATCHBOX TWENTY」の「UNWELL」という曲が大好きです。この曲の歌詞は、次のように始まります。

「All day Staring at the ceiling making Friends with shadows on my wall」

 CDには、次のような日本語訳が書いてありました。

「日がな一日 天井が壁にうつる影と 仲良くするのを見つめて過ごす」

 皆様はこの日本語訳をどう思うでしょうか?


 この日本語訳を英語に戻すと、

「All day, I'm staring at the ceiling. And the ceiling is making friends with shadows on my wall.」

ということです。天井が影を友達にしていたということです。うーん。
(物を擬人化するのは日本人の十八番ですが、海外ではあまり一般的ではなかったはずです。)


 私としては、

「All day, I'm staring at the ceiling. And I'm making friends with shadows on my wall.」

とした方がしっくりきます。一日中、(私が) 影を友達に、天井を見つめていた、ということです。何をするにも気分が乗らず、やる気が起きないときは、こういう感じだと思います。

 この場合、「making」の主語があいまいなので、どちらの日本語訳も正しいはずです。後は歌詞を書いたRob Thomasに聞くしかなさそうです。


 英語にしろ日本語にしろ、あいまいな表現は多々あります。歌詞はあいまいでも問題ないですが、契約書などがあいまいだと大問題です。そういう場合は、あいまいな表現がないか、注意を払う必要があります。

 主語の省略はあいまいさを作ります。「あれ」「これ」「それ」といった代名詞も、あいまいさを作ります。「あれ食べた?」と書かいて意味が分かるのは、会話の中だけです。

 一つの文に修飾語がたくさんあると意味があいまいになりやすいです。例えば、「私は可愛い黒い耳のビーグル犬を飼っています。」と書いてあったとき、「可愛い」のが耳なのかビーグル犬なのかがあいまいになります。

 作文をしていると、文章のあいまいさに気を遣います。読む人が勘違いしないように、意図が伝わるようにするのは簡単ではありません。練習が大切だと思う次第です。


 最後に問題です。以下の英文の正しい日本語訳は(a)(b)どちらでしょうか?
A panda eats shoots and leaves.
(a)パンダは木の芽や葉を食べる
(b)パンダは食べた後、銃を撃ち、去って行く。