西向くサムライって知ってるか?
1月12日、コンテンツ化する為に小細工を追加する。案内女子画像の表情をパパッとでっち上げる。え〜、日誌を書く程のモノではな・・・かったのだが。
最初に他人のページでバイオリズムを見た時は、単なる計算に過ぎないのではないかと思い、軽く出来上がるだろうと考えた。しかしそれは小さくない間違いであった。
そもそもバイオリズムとは、一定のサイクルで感情・体力・知力の調子がクルクル巡るという考え方である。
それを信じるか否かは各自の心内に任せておいて、興味を引かれたのは計算方法であった。
それは計り知れぬ巨大なモノとの戦いであった。ホンのこの前、辛うじて月を屈服させた(事になっている)ばかりの私には骨の折れる行為であった。
グレゴリオ太陽暦・・これが敵の名前だ。ふざけた事に月々の日付の規則性がアヤフヤである。しかも閏年の規則が珍妙極まりない。
- (1) 4で割り切れる年は閏年とし、2月末に1日を置く。
- (2) しかし100で割り切れる年を除く。
- (3) とは言え、400で割り切れる年は、やはり閏年。
合わせる為とは言え、これは非道い。而して何が問題になるのかというと、誕生からの全日数の計算に面倒が伴う事である。しかも、ここ何年かには上記の条件に合致する年が揃い踏みだからでもある。
特に(2)や(3)の問題が大きい。運の悪い世代であると言えばそれまでだが、具体的に機械を作っている身としては解決を避けて通れないのは言うまでもない。
まず誕生年と現在年の差を求める。大いなる神なるモノがもう少し親切であれば、単に 365 日をかければ良かったのだが。とりあえず(1)の条件に合致する年の数の検出からである。
この数は、余計に加算する日数でもある。さて、この中で(2)や(3)の条件に合致する年の数を減ぜねばならない。2000 年は双方に合致する年である。よって閏年である。
FOR 文で一気に処理をした。結果的にであるが、もの凄くふぬけた IF 文となってしまった。たった3行である。次は日数加算問題である。これも多少面倒だっただけでつつがなく設置する事が出来た。
・・・と言いたかったが、任意指定側で大騒ぎであった。ちっとも指定されてくれないのである。何かというと、すぐ NaN になる。何だってんだ!(ひつこい)一日ずつ加減するスクリプトは複雑を極めている。あの珍妙な暦法のせいだ。
木を竹で接いだ様なプログラムがズラズラと並んで行く。getMonth() が 0 から始まるのも面倒の元だった。何とかなったのであるが、マイナスの日付は正確な計算が出来なくなった。まぁ、不要だが。
天文学者ではない!
しかし、どうしても閏年周りがおかしい。誕生日と同じ数字の日付近も変だ。年単位で見ると日付のズレは無いが、一日一日確かめて行くと1〜3日ズレが発生するのだ。何か根本的なミスを内包している様子である。
だいたいバイオリズム見せ機は、何処のでも一月分程度バッと見せている。ウチの様に一日一日任意に見せようとしている所にはぶつかっていない。キットこの様な問題が発生するからであろうと考えられる。
ならばなおさら克服して見しょうぞ。とかいう気合も空回り、一向に埒があかない。あざ笑うかの様に1〜3日ズレては戻る機械。
はて?ナゼ戻るのか?そう言えば、バグる訳でもないし・・ここで一つの閃きがあった。
ごく簡単に言うと、誕生月を仮1月にする方法である。それまでは日付補正には通常のカレンダーを使用していた。何月の補正でもいちいち一月から数えていたのである。時々変な所に 28 日補正がかかったりしていたので怪しいとは思っていたのだが。
こうする事で日付補正精度は格段に上昇した(1〜3日→約1日)。ただし未だ全ての日付をチェック出来た訳ではない。何処にバグが潜んでいるかは分からない。
改暦騒動
ある日、秒数による経過日数算出スクリプトを思い付き、また参考になるサイトを訪ねてみた。たった3行で全く狂いの無いモノを作る事が出来た。作ったのだが… ('A`#)
(ノ`Д´)ノ彡┻━┻ ┐(´へ` )┌
い、いかに合理的とは言え、ワシャあ魂まで売りとうはないわっ!でも参考にはするね。上手く行ったら自分のヤツ使うから。
(後刻)ふふっ、ブラックボックスの力を
ちょっと借りて、かなり良くなった様だ。この様なフラ〜ッと来た青い目の宣教師みたいなスクリプトは利用するだけ利用して捨てるに限る。
我々の独自性は守られた。要するに、横で正しいと称する数値を表示させておいて、自スクリプトを修正したのである。ああ、大いに不合理であるよ。
ただ、ブラックボックスに支配されるより、単純な加減計算の方が良いと考えたからでもある。独自性も失いたくはない。
とは言え、要らなくなったから「捨てる」などという事は犬畜生にも劣る西欧人の発想そのものではないか。武士道にもとる。そう言った訳で、コメントとして残しておこう。
私は合理的だ、とお考えの賢い諸君はそちらを使ってくれたまえ。
※・・・ハッキシ言って、自分の考えたモノよか簡単で正確だったのが妬ましかっただけである。「単純な加減計算」とは書いているが、手順が遥かに複雑な計算法である。
エウレカ
次はこれを見て理解出来る様な処理を施す必要がある。ただ単に数字を表示するだけで終わっては味気ないし、このままではそこらの「作ってみましたよ」的コンテンツになってしまうので、色々と構想を練った。
様々な方式を吟味し、やはり目に見える様な形が望ましいのではないかと考えるに至り、その様に進む事とした。
上下 100 点方式とする事にしたが、これがまた面倒であった。また、それには相当の高度な数学知識を伴うモノとなった。全くもって占星術師か何かになった様な気分である。
以前読んだ本の中に、火星の運行計算に熱を上げていたとある天文学者が最後には気がふれてしまったとか書かれてあった。
詳細を省いても次の通り悪戦苦闘である。
- (1) まずは架空の円を想定し、
- (2) 直線上に伸びた架空の棒グラフを、
- (3) その架空の円の丸みに沿わせて伸ばして行き、
- (4) 円の中心と棒グラフの先と、棒グラフの基点から円の中心に伸びた線分と棒グラフの先に直角に交わる線分の交点で構成される三角形の・・・(汗)
要するに簡単に言うとサインカーブを作るハメに陥ったのである。
サインカーブを作る、などという事は、「さんすう」しか教えてくれなかったアホ工業高校卒の管理者には荷が重かったのであるが、持ち前の想像力を用いて図を描く事から始めて自ら原理を構築し、計算法を確立した。
(実は最初はタンジェントで作っていたが、余りにも極端な結果しか出なかった。ずっと一ケタが続いたかと思うと、急に無限大!!以前作った簡易測距儀からのアイデアだったのであるが・・・分かってる?)
しかしコンピュータの方が受け付け方に偏りがあって、あまり聞かないラジアンしか読んでくれない。らぢあん?しかし管理者は専門書を素早く読み解き、事に当たるのであった。
さて、数値としては程良く処理される様になって良かったのだが、このままではそこらの「作ってみましたよ」的コンテンツになってしまうので(ひつこ)、ディスプレイに気を配る時間が来た。
最初はグラフでも表示してやろうかとも考えたが、甚だ難しそうなので、棒グラフ形式にした。サインカーブを作る時に構想した架空の棒グラフを具現化するのである。これは簡単、任意の画像の height を操作すれば良かった。
ただし最初はマイナスの height などを設定し、エラるので途方に暮れていたが。こういうチョイミスは諸君も注意するべきである(アホじゃん)。あとは案内女子画像を細工して終了。ふぅ。そうそう、画像背景はグラフの長さに合わせた色合いになる様に仕掛けた。16 進数に変換して直接書き込むのである。
グラフの見やすさは、そんじょそこらのモノと比べても多分遜色はないだろう。何と言っても変わって行くのを見て取れるのが面白い。一挙に1ヶ月程度を表示するモノとはまた違った楽しみであろう。
後で、落ち目の(前日より下がった)項目は赤くなる様にしてみた。踏んだり蹴ったりな気分。時々真っ赤っかになるのはショック。
【コラム・本卦還り】
おおむね、58歳2ヶ月辺り(21252日目)に、全ての項目がゼロになります。それぞれの計算用の係数の公倍数なのですが…
数え年で言えば、ほぼ六十歳、つまり還暦ではないですか。偶然。