ただ、走るだけ。いつまでも

ただただ走ってます。いつかはサブ3.5。

ランオフ2週間/バージョンアップしました

みなさんおつかれさまです。

 

既にランオフ2週間。ようやく痛みが引いてきました。

しかし、周りで走っている人を見たり、ブログで脚が痛いながらも走っている人の記事を見ると、刺激を受けて走ってしまいそうなので、ブログからも距離を置いている日々です。

昨日、車で運転していたら、横を走るランナーに刺激を受けそうになりましたが、ガマンガマン。さいたま国際マラソンDNSになってしまうのは回避したい。エントリーフィー高かったし。

ハムストリング痛めるとできるトレーニングがホントに少ない。しかし、肉離れで飲み会に行かない理由は無いので、2kgくらい太ってしまった。

 

☆★☆

 

さて、ガーミンのデータフィールドをバージョンアップしました。

FA235Jに対応させることはメモリ不足地獄で断念。

petaさんのページ

run2die.net

ここで個別にペースを入力すると表示されるURL

f:id:yoneba_1717:20181104132424p:plain

このURLをコピペでGarminExpressかGarminConnectMobileで見られる今回のツールの設定画面にこんな感じで貼り付けます。アドレス部分が入っていても構いません。ツール上のハーフ部分のペース値は無視されます。25kmの部分が20〜25kmに適用されます。

もちろんCSVでもOKです。この場合は、分:秒の形式で、カンマ区切り。"は無し。半角数字のみで、最後はカンマで終わり。

前から順番に変換していき、エラーが出るとそこで終了します。個々のペース欄に入力されたものが適用されます。

スマホとガーミンを同期すると、設定画面の各ラップもアップデートされます(これ結構不安定です)

f:id:yoneba_1717:20181104132924j:image

その他、バックグラウンドは従来は白のみでしたが、黒にも対応しました。また、背景が白のときの青字が見にくいとの声もありましたので、ダークブルーに変更(背景黒の時はそのまま)

また、設定の各ペース入力欄に0を入力すると、その一つ前のラップのペースがそのまま適用されます。(最初のラップには0の入力はできません)

ということで公開してみました。

apps.garmin.com

apps.garmin.com

 実は、ここまで到達するのにかなり苦労しているので、備忘録としてプログラミングのTipsとして記録しておきます。あまり興味のない方はこちらへどうぞ。

にほんブログ村 その他スポーツブログ マラソンへ
にほんブログ村

 

☆★☆

 

Garmin ConnectIQでCSVを扱い、数値化するための備忘録です。

1 文字列分割機能が無い。

ConnectIQはJavaScriptと似ています。なので、CSVを扱うのであれば、これで配列に格納されて、分と秒を秒に変換したら終わりって、なめてかかってました。

var str = "5:00,5:01,4:55"

// カンマで区切る

var lapPace = str.split(",");

 しかし、ConnectIQのMonkeyCのStringのライブラリにはsplit()が無い。それではと思って、文字列検索関数のfind()も文字列の先頭から検索する機能しか無い。

 

仕方無いので、配列に変換してループを回すことにしました。

それで書いてみたのが、以下のコード。

        var startIndex = 0;
var endIndex = 0;
// プロパティから文字列を読み込む
var csvSetting = Application.Properties.getValue("PaceCSV"); // char型の配列に文字列を変換する。 var csvStringArray = csvSetting.toCharArray(); // 配列化した文字列を最初から最後までスキャンします。 for( var i = 0; i < csvStringArray.size(); i++ ) { //カンマを見つけた場合と配列の最後に到達した場合に前回のカンマと今のカウンタ間を文字列に変換 if(csvStringArray[i].toString().equals(",") || i == csvStringArray.size()-1){ // カンマを見つけた時の配列位置を記録.最終文字対応に1を加える endIndex = i + 1; // 前回のカンマの次の文字から今回のカンマまでを配列から切り出し、文字列化する。 var lapTime = csvSetting.substring(startIndex, endIndex); // 今回のエンド位置を次回のスタート位置に代入。 startIndex = endIndex; ・・・・・・(分と秒に分けて、秒に変換する処理) }

Stringには、toCharArray()関数があるので、これを使って配列に変換します。あとはfor eachループなどという高級なループは予想通り無いので、iを使ってループを回します。

","を見つけると、前回のカンマ位置との間の文字列を切り出して、":"の前を分、後を秒として、計算して秒に変えます。

あとは、プロパティに書き込んで終わりです。

2 公式サイトに誤りが・・・

Class: Toybox::Lang::String — Connect IQ SDK

ここのtoNumber()ですが、最初が数字で始まって、途中に数字以外があるとそれ以降は無視される仕様です。そして、最初の文字が数字でない場合はエラーがthrowされるように記載されています。しかし、実際はただ単にNullが返されます。どうやってキャッチしようか随分悩んでしまった。

というわけで、思ったよりも時間を食ってしまいましたがどうにか対応が完了しました。果たしてさいたま国際マラソンで自分用に使えるのかどうか。