Ermitejo - エスペラント語日本語翻訳

#BLOGO
辞書引き機能に処理時間偽装疑惑 >
2009/2/5

1234567890秒に寄せて

分類: 雑記 / タグ:

全世界300万人(国連推計)のゾロ目・並び目フリークの皆様、ご機嫌麗しゅうございます。本日は当社内非公認コミュニティ「ゾロ目・並び目友の会」から、来たる2009年2月14日(土) 午前8時31分30秒に訪れる世紀の瞬間についての素敵なお知らせをお届けします。

日本標準時(JST)に於ける上記時刻は、一見すると何の変哲もないありふれた時刻に見えます。しかしこの時刻こそが、伝統ある標準Cライブラリtime_t型に於ける第「1234567890」秒目という瞬間を意味するのです。

[2009/02/04 21:23:01.13] @ D:\home >
perl -E "say scalar localtime(1234567890)"
Sat Feb 14 08:31:30 2009

紛う事なきこの並び目は、大自然の生み出した驚異とも言えるでしょう。大変縁起の良い節目となっておりますので、万障お繰り合わせの上、奮ってご体験ください。

なお、この時刻はUNIX時刻(エポック秒)などとして使われていますが、勿論お使いのWindowsコンピュータでも容易に確認することが出来ます。具体的な方法は後述しておりますので、是非ご覧ください。また、協定世界時(UTC)では2009年2月13日(金) 午後11時31分30秒となります。

それでは、めくるめく並び目の世界を、一緒に垣間見てみましょう。

この掛け替えのない瞬間

35年ぶりの快挙

さて、このエポック秒の前の並び目である第123456789秒は日本標準時で1973年11月30日(金) 午前6時33分09秒となりますので、今般の並び目は実に35年ぶりの出来事です。

当社の平均年齢は35歳となっておりますが、就職・転職サイトによるとそれよりもかなり低めの値を最頻値とする分布となっているため、当社社員の半数以上の方はお生まれでない計算になります。新進気鋭の各位に於かれましては、人生初の体験を存分にお楽しみください。

また、35歳以上のベテランの各位に於かれましては、当時に思いを馳せられて、美しい思い出のすよすがとしていただき、お友達やご家族との語らいにご活用しては如何でしょう。

32ビットでは最後の並び目

さらに注目すべき点ですが、32ビットのtime_t型での上限は2147483647秒(日本標準時で2038年1月19日(木) 午後0時14分07秒)となっております。これは、符号付き整数を表す216 - 1の結果に由来するものです。従って、2345678901秒や12345678901秒は(32ビットの世界では)永遠に訪れることのない瞬間です。

これこそが、かの有名な2038年問題と呼ばれる現象でございますが、2000年問題と同様、直近になって慌て始める悪癖は、あと19年経って直ることは望めません。

AMD64(Intel 64)等によりハードウェアの64ビット対応は進んでおりますが、ソフトウェアの末端までの対応はIPv6と同様に今一歩という現状です。WindowsはXPから64ビット版が市販されておりますが、来たるWindows 7に於いても32ビット版と64ビット版が併売され続けます。32ビットの世界では最後の瞬間となりますので、お見逃しのないように十分にお気をつけください。

勿論、当「友の会」ではコンピュータの誤作動を防止するという俗物的な理由ではなく、美しい数字の並びを西暦292277026596年まで末永くお楽しみいただけるという高尚な理由により、64ビットのtime_t型を推奨しております。

世紀の瞬間の確認用スクリプト

単純なone-liner

さて、世紀の瞬間を存分にお楽しみいただくために、当「友の会」では例えば以下のようなPerl one-linerをご用意致しました。

perl -E "$t = time; say qq{$t = }, scalar localtime($t);"

これを実行すると、例えば本日現在だと以下のような表示となります。

[2009/02/04 21:24:34.12] @ D:\home >
perl -E "$t = time; say qq{$t = }, scalar localtime($t);"
1233750274 = Wed Feb 4 21:24:34 2009

このスクリプトは現在のUNIX時刻と現在日時を併記する単純極まりない実装ですので、例えば「その時」だけではなく毎営業日の昼休みにいそいそとコンソールを上げていただき、刻々と近付く「その時」を体験いただくことも出来ます。

2月14日へのカウントダウンにもお使いいただけます

我が国の伝統であるお歳暮もお中元も年賀状もないのに、西洋かぶれというより菓子メーカのプロモーション由来の聖ウァレンティアヌスの日を祝うという変な習慣がある当社ですが、諸姉諸兄に於かれましてはその日を指折り数えて待つよりも、上記one-linerを実行することによってデジタルに刻んで行くことで、「ちょっと違うかっこいいIT系のボク/ワタシ」とうそぶくための格好のライフハックとなるかも知れません。本当かどうかは知りませんので当会へのお問い合わせはご遠慮ください。

自動表示版もご用意しております

なお、上記コマンドを自力で打つというエキサイティングな体験と併せて、世紀の瞬間を見逃されないよう、二つ目のコンソールを立ち上げ、片方では以下のように自動表示をしておきますと、保険になろうかと存じます。

[2009/02/04 21:26:37.82] @ D:\home >
perl -E "while (1) {$t = time; say qq{$t = }, scalar localtime($t); sleep 1;}"
1233744529 = Wed Feb 4 19:48:49 2009
1233744530 = Wed Feb 4 19:48:50 2009
1233744531 = Wed Feb 4 19:48:51 2009
Terminating on signal SIGINT(2)
出力バッファのフラッシュに留意

留意点と致しましては、当初のone-linerではsayの代替としてprintを使っても良い(perlのオプションは-Eではなく-eでも可能となります)のに対して、後者の無限ループではprintを使うと何も表示されないということが挙げられます。

これは出力バッファのフラッシュの挙動によるものですので、perl 5.10.0が使える環境では面倒のない-Eオプションおよびsay関数の使用をお勧めします。

ccperlをお使いの方に於かれましては、perlは5.6.1ですので、

ccperl -e "while (1) {$t = time; print qq{$t = }, (scalar localtime($t)), qq{\n}; sleep 1;}"

のように、手動で改行を挿入することで回避可能です。

改行が不要な場合では、特殊変数$|に1を立てて、

ccperl -e "$| = 1; while (1) {$t = time; print qq{$t = }, (scalar localtime($t)), qq{\n}; sleep 1;}"

とするのが良いでしょう。さらに以下のように記述すると、

ccperl -MEnglish -e "$OUTPUT_AUTOFLUSH = 1; while (1) {$t = time; print qq{$t = }, (scalar localtime($t)), qq{\n}; sleep 1;}"

Perl Best Practicesをフォロー出来ますので、また一興です。

見過ごしてしまった! でも安心、疑似体験のご案内

上記いずれの作業も失敗してしまった場合で、なおかつご自身のウェブログなどにスクリーンショットを貼り付けるなどしたい方は、NTPを止めた上で端末のローカル時刻を偽装し、感動の瞬間を偽装することで擬似的に再体験することも可能となっております。

終わりに

なお、最後に「友の会」から大切なお知らせです。

ふとデジタル表示の時計に目をやると12:34だとか22:22であることが多いことを以て「俺って第六感があるんじゃね?」と思う方をお見受け致しますが、「誕生日のパラドックス」と同様にごくありふれた事象ですので、勘違いするのは大概にしておきましょう。

それでは、よきゾロ目・並び目ライフをご満喫ください。

以上、引用終わり

……という駄文を社内SNSにつらつらと書き散らしていたら、某所から「この暇人め!」と罵られたGardejoです。こんばんは。折角なので、何点か補足しておきます。

  • 他チームの作業の出来上がり待ちで夕食をパクつきながらまったりと書いていただけですが、思いの外、長文に膨れ上がってしまっていました。出落ちなので続きはありません。悪しからず。
  • time_t型に関してはtime_tパーティという小見出しもWikipediaに存在します。世の中考えることは皆同じですね。
  • Googleで検索してみても、熊恭太郎さんの熊恭太郎雑記内のもうすぐ1234567890秒という記事など、多くの言及があります。「0×20歳になりました!」という親父ギャグは仕事柄良く耳に入りますが、生年月日をtime_t型で宣言するというのは思い付きませんでした。
  • 今年も挿入された閏秒ですが、UNIX秒は閏秒が入っていませんので、35年前の正確な時刻ではありません。委細は上記Wikipediaの記事をご参照ください。
  • 例示したWindowsコマンドプロンプトのプロンプト表示はset prompt=[$D $T] @ $P $+$M$G$_として環境変数に切り込んでいるため、OS出荷時の標準設定とは異なります。
  • 2/9追記:Slashdot.jpでも話題になりました
  • 2/13追記:小飼弾さんのウェブログでもJavaScriptによるカウンタスクリプト付きで取り上げられています。秒飛びを防ぐために1sec(1000msec)でなく500msec毎にカウントするだとか(PerlならTime::HiResですね)、「その時」以降はカウントしないだとか、短いスクリプトにも心配りが行き届いていて、しきりに感心しました。

#444 (2009/02/05 00:36:24), Gardejo

1 件のコメント »

  1. [...] t型において, 1234567890秒である2009/02/14/08:31:30(土)となった. ちなみに協定世界時(UTC)では2009/02/13(金) 23:31:30に, 1234567890秒を迎えたことになる. http://blogo.ermitejo.com/2009/02/05/je_la_1234567890a_sekundo/ [...]

    ピンバック by CreativePro  -  time_t = 1234567899 — 2009/02/14 土曜日 @ 15:06:12

このコメント欄の RSS フィード トラックバック URL

ご意見・ご感想をお寄せください

辞書引き機能に処理時間偽装疑惑 >
< 脇書非表示 > 脇書表示