JavaScript

測地線距離計算式・計算ライブラリの精度評価

測地線距離計算式・計算ライブラリの精度評価

2地点の緯度経度を与えてその間の距離を求める計算式はいくつかあり、 GeoDistanceとその他の測地線距離算出式の精度 ではランダムな2点間の距離や、日本での運転経路データを用いて代表的な計算式の精度を評価したが、 短い距離の計算精度の評価と、対蹠点付近の計算精度の評価が不十分であった。

そこで、比較する計算式を追加した上で、GeographicLibのテストデータを用いて計算精度の再評価を行った。

JavaScriptのCache APIで有効期限付きの階層キャッシュを実装する

JavaScriptのCache APIで有効期限付きの階層キャッシュを実装する

GPXトラックログを間引く・簡略化RWGPS地理院標高 - Chrome拡張機能 で国土地理院の標高タイルを利用する機能を付ける際、国土地理院の標高タイルをキャッシュする機能を実装したかった。

そこで有効期限を付けて、かつメモリとディスクの2階層構造を持つキャッシュを実装してみた。

ガルーンからGoogleカレンダーに同期する(GAS使用)

ガルーンからGoogleカレンダーに同期する(GAS使用)

Cybozuのガルーン(Garoon)はよくできたソフトウェアなのだが、他のサービスとの連携、という点では使いにくかった。

以前からSOAP APIはあったものの、繰り返し予定が難関で、実際の日にちを都度計算しなければならず、同期ツールの作成を断念していた。

だがREST APIが登場し、繰り返し予定が1件ずつ返されるようになってとても処理しやすくなったので、GASで動作するガルーンからGoogleカレンダーへの一方向同期スクリプトを作成した。

Garmin Connectでこれまでのすべてのアクティビティを一括ダウンロードする

Garmin Connectでこれまでのすべてのアクティビティを一括ダウンロードする

Garmin Connectがサイバー攻撃を受けてダウンした。

ランサムウェアにやられたらしい、ということで最悪の場合、これまでの記録が消えてしまう可能性がある。

幸いにもとりあえず復旧したようなので、これまでの全アクティビティをローカルにバックアップした。

GASのgoogle.script.runをPromise化する

GASのgoogle.script.runをPromise化する

GASでクライアント側のJavaScriptから、サーバ側のJavaScriptを呼び出す時、google.script.runを使用する。

ただこれは非同期処理でありながらPromiseを返さず、独自にwithSuccessHandlerwithFailureHandlerにコールバックを設定する必要があるので、ちょっと面倒。

ということで、Promise化するコードを作ってみた(V8エンジン限定)。

bxSliderで2番目以降の画像が一瞬表示されるのを防止する

bxSliderで2番目以降の画像が一瞬表示されるのを防止する

もうjQueryも古いと言われているが、会社のウェブサイトでjQueryプラグインのbxSliderが使われている。 Google先生のPageSpeed Insightに注意されたとおり、レンダリングブロックするJavaScriptを後ろ(</body>直上)に配置したところ、 2枚目以降の画像が一瞬表示されてしまう現象が発生。 これはJSをレンダリングブロックしないように後ろに配置したり、
Google Analyticsで動画(Video要素)のイベントを計測

Google Analyticsで動画(Video要素)のイベントを計測

会社のウェブサイトに貼ってある動画ファイルが、実際にどれだけ再生されているのか調査するべく、 Google Analyticsのイベントで計測するためのコードを作ってみた。 計測対象は以下のイベント。 再生開始(play) 最後まで再生(ended) 一時停止(pause) 再生再開(resume) シークした(seeked) どこまで再生したか(動画時間の10%, 25%, 50%, 75%, 90%) HTML側 <video id="movie001" width="(動画幅)