Timezone と Uniqlock

ちょっと酔っている。

仕事で扱っているOCamlコードのタイムゾーンの扱いがヌルい。誰か地球が平坦だと思っている奴がいるらしい。残念ながらOCamlは使ったからといって誰でもよいコードが書ける言語ではない。逆にそんな言語があっても困ってしまうが。ある地域の何年何月何日何時何分何秒という情報からepoch(世界共通のある時点からの秒数)を得る場合に、タイムゾーンを明示しない場合、その地域ではなく、環境のタイムゾーン(Unix の TZ 環境変数だ)を自動的に使ってしまう、というライブラリ関数に問題がある。

このバグを直すのは簡単なのだが、また、誰かが俺の知らないところで同じバグを書く可能性がある。どうにかして、ある程度、品質のよいコード*しか*書けないようにしたい。(そうじゃないとまたバグフィックスをやらされるわけだ。)上に書いたように、そんなことは完璧にはできないのだが、しかし、ある程度、なら、できるはずだ。例えば、日付と時刻からepochを計算する場合、明示的に時刻のタイムゾーンを与える「良い」関数を通した場合にだけ、「良い」epochが得られるようにする。この「良い」epochか、「良いかどうか確認されていない」epochかは型パラメータ情報を使って識別する。というわけで、phantom type の出番だ。Phantom type は、、、ええと、自分で調べてくれい。わざわざ書くほど読者がいるとも思えんし、今腹一杯ステーキ(350g)食ってきたので書けない。マティーニ頼んだら「ジャンボ・マティーニ」だし、ほとんどウォッカだし(まああの300mlのオリーブ入りウォッカはうまかったが)。まあリクエストされたから良い気になって書くかもしれんけど。

といろいろ考えていたら、 Uniqlock というものを知って画面に表示している。このプログラムはちゃんとTimezoneを扱えているようだ。(夏時間と冬時間の境目でなにが起こるかは知らんが、、、)ってお前はそれ言いたいだけちゃうんかと。いやしかし、暫くすると自動的に音量が0になるとか、芸が細かいよこれは。

すまん。酔っ払っている。こういう時もあるさ。