Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール
色々考えた末に、全く新しい観点から「UNIX 入門編」を書いている。世の中には当たり前とされていることが多いけれど、深く考えてみると実は納得がいかないことばかりだ。
UNIX time はそのひとつ。Linux 上の man page は、ctime に関して次のように言っている。
The ctime(), gmtime() and localtime() functions all take an argument of data type time_t which represents calendar time. When interpreted as an absolute time value, it represents the number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
"UNIX time" が、西暦1970年1月1日の0時を起点(UNIX epoch)にした「経過時間(秒)」であることは、良く知られた事実である。タイムスタンプやオーナーID など、UNIX ファイルのメタデータは、inode 上に記録されるが、Linux の場合、UNIX time は atime/mtime/ctime (この3つの使い分けが、また曲者なのだが)共に、32ビット符号付き整数として取り扱われる。と言ってもこのままでは「絵に描いた餅」に過ぎないから、実際に自分の目で確認してみよう。
$ touch test $ ls -l test -rw-r--r-- 1 wataru wataru 0 Nov 17 01:44 test
簡単である。ただ単に、touch コマンドで空のファイルを作成し、そのタイムスタンプを確認しただけである。次に、coreutils パッケージに含まれる stat コマンドに登場願おう。
$ stat test File: `test' Size: 0 Blocks: 0 IO Block: 131072 regular empty file Device: 302h/770d Inode: 29362 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ wataru) Gid: ( 1000/ wataru) Access: 2004-11-17 01:44:06.138216672 +0900 Modify: 2004-11-17 01:44:06.138216672 +0900 Change: 2004-11-17 01:44:06.138216672 +0900
察しの良い方は既にお分かりの通り、この情報は inode 上に格納された test ファイルのメタデータを人間様に読みやすい形式で出力したものである。これでは実感が湧かないので、-t (Terse) オプションを指定する。
$ stat -t test test 0 0 81a4 1000 1000 302 29362 1 0 0 1100623446 1100623446 1100623446 131072
この訳の分からない数値の羅列が「inode」すなわち test の正体である。それぞれの値が一体何を意味するのか?誰しもそう思うだろうが、驚いたことに man 1 stat 中にその答えはない。「ええ加減にせんかい!」とモニターを叱り付けながら、stat.c のソースを紐解くことになる。
その答えは省略するが、数値を見れば容易に予測がつく通り、1100623446 が目指す UNIX time である。根性のある方は、このバイナリー値から時刻表記を導き出してみて欲しい。
さて、上記の英語表現の中には、実は2つの「まやかし」が隠されている。1つは、"second" の定義である。古来、数多くの天文学者達がより正確な「秒の定義」を目指して、骨身を削ってきたが、その努力は今も続いている。1秒の定義は時代の変遷と共に、大きく変化しておきており、「1970年の1秒」と「1972年の1秒」は厳密に言えば違うのである。これは 1961年から1971年までが「旧協定世界時 UTC」に基づいているのに対して、1972年以降は「(新)協定世界時 UTC」に基づいているためである。
国際原子時(TAI)という絶対的物差しで見た場合、1972年は1970年よりも約2秒遅れている。よって、UNIX epoch は本来 "TAI - 8 seconds" (国際原子時に遅れること8秒)と表記すべきだと私は思うのだが、世界中どこを探してもそのような記述はない。唯一、あの D. J. Bernstein 氏が次のように述べている。
Arthur David Olson's popular time library uses an epoch of 1970-01-01 00:00:10 TAI.
Arthur David Olson 氏は、UNIX おける Time Zone に関して大きな貢献を果たしている一人だが、この "1970-01-01 00:00:10 TAI" という表記は私が下した結論に最も近い。D. J. Bernstein 氏が発表した clockspeed および libtai も含め、さらに深い調査が必要なようだ。「時間道は厳しい」が、時を巡る先人の苦労と知恵を知ることは、何よりも楽しい。
最後に、2つめのまやかしであるが、これは "UNIX time の時系" が明記されていない点にある。"since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)" という表記を読めば、誰しも UNIX time は UTC に基づく時系だと考えることだろう。私も最初はそう考えた。
しかし、UNIX time と協定世界時 UTC は、全く違う。UTC は閏秒を含むが、UNIX time は閏秒を無視しているからである(POSIX も閏秒は無視すると明記している)。にもかかわらず、UNIX time と UTC が示す時刻は現時点で「一致しているように見える」。
本来両者が一致するはずはないのだが、この矛盾こそが UNIX における時間管理のアキレス腱となっている。Time Zone を適切に設定すれば、glibc は閏秒にも対応可能である。しかしながら、カーネルレベルでは、Linux はもちろん *BSD でさえ、その対応はおぼつかない。「時刻と時間」に関する正しい理解が、今こそ必要なのではないだろうか?
最近は、もっぱら「にわか天文学オジサン」と化して、本屋の天文学コーナーを熊のようにウロウロすることが多い。そんな折り、オレンジ色の "なっちゃん" の中に PIC マイコンの基盤が埋め込まれた摩訶不思議な表紙の本を見つけた。そのタイトルを「上がれ!空き缶衛星」という。副題は "CANSAT PROJECT" となっているから、これは Can Satellite Project に違いない。
うっそ〜〜〜!?カンカンを衛星にするんですか?マジですか?表帯に書かれたキャッチコピーが、また泣かせる。
熱い思いと、仲間がいれば、きっと上がる! 日本初の超小型衛星プロジェクトに青春をかけた工学部大学生たちの1年間の記録 熱血理科系ドキュメント!
と来たもんだ。裏帯のコピーは次のように続く。
机上でしか宇宙を知らなかった学生たちが突然、小さな人工衛星を作ることになった。 資金はほとんどない。 あるのは根気と体力と情熱、かき集めた皆の知恵だけ。 失敗の連続、思わぬ助っ人の登場、不夜城と化した研究室。 やがて、運命の打ち上げの日が来る・・・。
本書片手に、既に夢の世界へトリップしつつあった自分にふと気付く。「いかんいかん、この続きはお家で」
で、一気に読み切った訳だが、久々にムラムラとこみ上げてくる熱いものを感じた。読後感は、「なんで学生ばっかりこんな面白い事が出来て、税金払っとるオジサン連中には許されへんのや!」という、何とも自己中極まりないものである。正直、私はこの学生さんたちが、羨ましくて仕方がない。しばらくの間「オジサンはとっても悔しい、ウッキ〜〜!」と叫びつつ、Google 上でネタ元のチェックを行った。
残念ながら、本書の巻末には日本の NPO 法人である UNISEC (University Space Engineering Consortium) へのリンクが示されているだけであり、その後の感動的な CubeSat 打ち上げや、お世話になった AERO-PAC, ARLISS への URL が示されていない。"References" を欠いた学術論文は世の中に存在しないように、一般書と言えども出典は明示すべきであろう。
そこで、アメリカの偉大なるロケット野郎達と Twiggs 教授に心からの敬意を表しつつ、以下私なりに若干の補足をしておきたいと思う。
ハードウェア野郎に国境はないが、こと "ロケット野郎" に関しては、日本は大きな遅れを取っている。川島レイ氏が書き上げる空き缶衛星物語は、アメリカはネバダ州、Black Rock 砂漠を本拠地に活動するロケット野郎達、AERO-PAC (Association of Experimental Rocketry of the Pacific) の粋な心意気からスタートした。AERO-PAC のサイトを覗くと、トップページでは2匹のアライグマがロケットに乗ってスッ飛んでいる。素敵すぎる・・。
本書を読むと分かるが、この CanSat Project は缶ジュースサイズの超小型衛星の打ち上げを目的として、スタンフォード大学の Robert Twiggs 教授が発案したものである。記念すべき第1回のプロジェクトには、日本から東大および東工大の学生チームが参加したが、肝心の打ち上げロケットを調達することが難しかったため、ロケット野郎達の胸を借りて、地上4000mの高度まで打ち上げることになった。約15〜20分間の滞空時間を利用して、地上局との遠隔測定データの通信、パラシュート制御による目標点への最短着陸(comeback competition)などが、各参加大学チーム間で争われる。昨年の様子はこちらから伺うことが出来る。お勧めは、砂漠から打ち上げられるロケット映像。オジサンも Black Rock 砂漠で「ヒュ〜ヒュ〜」って、言ってみたいのである(マジ)。
この他、現地での ARLISS 活動の様子は日本大学のページがお勧め。砂漠を背に歩く、8人の学生諸君のカッコ良いこと!
詳細については、ARLISS (A Rocket Launch for International Student Satellites)のサイトを参照して頂きたい。トップページ上では、Black Rock 砂漠を背にして、バズーカ砲を二回りほど大きくしたようなごっついロケットを担いだサングラスのオジサンが、妙な迫力を持って読者に迫る(ひょっとして、この人が Twiggs 教授であろうか?)。
それにしても、同写真の下に掲げられたメッセージが渋い。曰く、
The Rocket Launch for Can Do Students
この短い言葉は、ARLISS プロジェクトの神髄を実に良く物語っていると思う。翻って、我が日本において "Can Do Students" を育てることは、果たして可能なのであろうか?
その後、CanSat は CubeSat に進化し、遂に人工衛星として、地球周回を果たす。まさに「オネアミスの翼」そのものである。UNISEC 上には、CubeSat 物語と題して、東大チームと東工大チームの手記がそれぞれ掲載されているが、ひとつの読み物として私達の心を捉えるのは東工大チームであろう。
中でも、打ち上げのクライマックス、「ピギャー」が聞こえた日のふたつは、読みながら思わず目頭がジンと来てしまった。第三者の言葉よりも何よりも、実際に製作に携わった学生達の生の言葉は、圧倒的な力を持っていることが分かる。それにしても、「体中の細胞という細胞から、涙が出たって感じでした」とは、なんて素敵な表現だろう。オジサン、完敗である。
最後に、エピローグに添えられた川島氏のメッセージを紹介しておきたい。
人生、先はわからない。 明日、生きているかどうかさえ、本当のところはわからない。 でも、あのとき、砂漠で彼らが強烈な一瞬を共有したのだということは、何があっても変わらない。 あの一瞬は、確かに彼らの十ヵ月の努力が凝縮したときだった。 ・・中略・・ たくさんのひとたちの努力が、その一瞬、一つになる。 同じ夢を、その一瞬に、いっしょに見る。 そういう想いが凝縮した一瞬は、永遠なのだと思う。 永遠に残る「一瞬」を自らの手で作った学生たちに、心からの賛辞をささげたい。
本書をきっかけとして、学生さんから "元気" を分けてもらったような気がする。川島氏の次回作、CubeSat 編に期待しよう。