ガレコレ [Garage Collection]
2020年9月28日(月)
兵庫県神戸水上警察署から電話有り 警察・交通
 今日11:27に078-306-0110からスマホに電話が入りました。兵庫県警捜査一課T氏より、ガレコレのサイトにある『秒数時計』についてお伺いしたいとのことでした。

--
秒数時計(修正済み)
http://neconote.jp/tool/sec.html
--

 普通にJavaScriptで動作するもので、2015年3月7日にサーバーに登録したものでした。ファイルが悪用されたのか、ガレコレを語った犯罪と思ったのですが、そうでは無いということで、ホッとしました。捜査一課ですが、殺人事件でも無いとのことでした。

 話をしながら、電話番号をパソコンで調べると、兵庫県神戸水上(すいじょう)警察署と一致するので、尋ねられるままに、お答えしました。インターネットのことは、かなり詳しいので、捜査協力が必要であれば、ご協力します。

http://www.police.pref.hyogo.lg.jp/ps/09suijyou/index.htm



 プログラミングの時刻はデバイス(パソコン、タブレット、スマホ)の時計から取ってきており、そのデバイスの時計は『NTPサーバ』で校正されています。通信速度も加味されるので、デバイスの時計はかなり正確なはずです。しかし、実際は、自前のWindows10パソコンとiPhoneで、なんと0.5秒ほど差がありました。これにはビックリ。



 さて、改めてこのプログラミングを見てみると、まあ、おそまつな内容で、最大1秒近く遅れる可能性があります。その程度のものですが、結構「利用しています」とのお礼の声をいただき、今日までそのままにしておきました。

 まずは、初期設定で、0ミリ秒からスタートするものに置き換えました。自前の非力なWindows10パソコンでは、ほぼ正確な値を表示しますが、自前のiPhoneXsMax(iOS13.7)Safariでは、1秒ごとに1ミリ秒ほど増えていきます。setInterval(関数,999)にすると、増加をかなり抑えられることも分かりました。昨年買ったMacでは、iPhoneほどではありませんが、誤差が増加していきます。

 setInterval()では、これが限界ということです。

 setTimeout()で、誤差を加味して関数を再呼び出しする方法に切り替えました。いい感じで、デバイスの時計との誤差が数ミリ秒以内に収まっています。

--
<script>

window.onload
 
=
 
_main;

function
 
_main(){
 
 

 
/*
 
時刻表示をここに記述(1ミリ秒程度)
 
*/
 
 

 
setTimeout(_main,1000-Date.now()%1000);
}

</script>
--



P.S.
 
インターネット接続していれば、ブラウザからNTP[Network
 
Time
 
Protocol]サーバに直接アクセスする方法もありますが、そこまでは不必要でしょう。デバイスの時計とずれることも考えられて、使い方によっては支障も出るでしょう。


P.S.2
 
デバイスの時刻が自動設定になっているか確認しましょう。

Windows10:設定>時刻と言語>日付と時刻
iPhone:設定>一般>日付と時刻
 
お問い合わせ


by Network Communication Note