高校時代はBASICのプログラムを作るとレポート用紙に書き出して人に渡すという、きわめて原始的な方法で配布したものです。(コピーさえしなかった。)
そのうちカセットテープに保存して渡すようになり、やがて5インチフロッピーの時代が来たのですが、私は使い物になるパソコンは3年前まで持っていなかったので、レポート用紙にアイデアを書いていって、大量のおやつと一緒に友人宅へ持っていって動作を確認するというスタイルは長く変わりませんでした。
様々なプログラミング言語やマシンがあった中で、このJavaScriptによるプログラミングは配布方法の軽さという点では画期的な気がします。
Javaアプレットならもっとすごいことができるのは知っていますが、Scriptではプログラムのソースそのものが簡単に見えるので、プログラミングの不細工な点やプログラムの制作態度まで伝わってしまいます。その点、レポート用紙に書きなぐって手渡すのに似ています。
何より自分のプログラムが人のマシンで特に断りなくスイスイ動いているというのは今までの経験に照らすと非常に刺激的なことでした。
それが仕事な人たちにはあまり何ともないことかも知れませんが。
さて、ノーガキが長くなりました。
今日はスクリプトの勉強第2限目(JavaScript歴6時間になりました)、Internet Time時計を自作して、HEXclockと比べてみよう(そしてHEXclockの長所を知ってもらおう)という演習です。
このページ左上に5つ窓があって、上から普通の時計、HEXtime、Internet Time、杉山風拡張Internet Time、0時からの経過時間、が表示されています。
スクリプトそのものはもう動いているのでソースをみていただければお話は終わりですが、主要部分を抜き出してみればこうなっています。
何ともすさまじいプログラムです。
N-BASICで作ったら0.1秒で処理が終わったかどうか怪しいものです。
まず取り組んだのは1日の経過秒数をGMT(グリニッジ標準時)に変換して、86400で割って1000を掛けることです。
たちまちそれらしい時計が動き始めました。
動作確認のため http://swatch.com/ からダウンロードして来たデスクトップ時計を並べてみたら、表示されている時間が違います。あれ?
改めてswatch.comを訪問して、普通時間<-->Internet Timeコンバータをいろいろと試しているうちにロンドンの午前0時が@000でないことに気がつきました。swatch社の所在地のスイス時間がInternet Timeの標準のようです。なんという愛国心。
日本と14時間の時間差をとるときちんと動作するようになりました。swatchの提供するデスクトップ時計は秒までしかチェックしていないようなので私のInternet Time時計の方がいくらか精密なようです。(正確というのとは別です)
次に物足りなくなったのは空き桁にゼロを追加する処理です。@1と表示するのが正しいのか@001と表示するのが正しいのかは知らないのですが、@001の方がかっこいいと思います。またHEXclockの方も午前零時を過ぎると「 A」なんて表示になって寂しいのでアセンブラのアドレス風に「000A」と表示させるよう改造します。
小数点以下2桁を取り出す場合は0.01の場合と0.10などの場合、単純に数字だけ取り出してしまってはどちらも1が取り出されてしまうため、いろんな場合を考えながら誤動作のないように調整していきます。考えた結果はかなり大胆な処理をしていますが。
最後に、ここまでは元となる時間をローカルタイムを時分秒に分解することによって取り出していましたが、JavaScriptのオブジェクトの中には1970年1月1日午前0時からの経過ミリ秒を取得するものがあるのでそれを利用する方法を考えてみました。経過ミリ秒と称している割には最後の3桁が必ず000なのでちょっと卑怯なオブジェクトですが。これはGMTが得られるらしく、処理にけっこう手間取りました。最初の方法による部分はコメントアウトして残してあります。(むしろ、最初の処理の方がスマートです。)
こうして一応動くようになったものがこのページに貼りつけてあるものです。
プログラムのソースは時としてプログラマーの人となりまで表してしまうものですが、私のプログラムは案の定雑然としています。行を変えて整然とやるべきことをごちゃ混ぜに一気にやってしまっています。それはスタイルの問題でまだよいのですが、自分でも許し難い問題を2つほど含んでいます。
1つは変数の取り扱い方で
もう1つの間違いは
さて、本題です。
swatchの推奨するInternet Timeと、当委員会の提唱するHEXtimeと、どちらが実用的でしょう。
実用性はswatchの方が勝るものの、見ていて楽しいのはHEXtimeの方だと思うのです!
![]() |