一汁三菜

自分が楽しいと思うこと、マラソン、旅行、その他日々の記録をしたい。

I-JSON

昨年末にI-JSONがLast Callになりました。普通のJSONでは互換性の為に一部柔軟な記法を認めていたり、複数の記法を認めていたりします。これだとパーサを書く為に通常ほとんど使われないようなケースにも対応する必要があり、実装が煩雑になっていたりしました。またオブジェクト中に重複するキーの存在を許容していたりするなど、データ交換において思わぬ弊害を生む要因がいくつかありました。それらを改善する為に、既存のJSONの記法にさらに制限を加えたのがI-JSONです。

I-JSON自体はJSONと100%互換性があります。JSONに新たに加わる制限は以下の通りです。

  • UTF-8限定 (JSONUTF-8, UTF-16, UTF-32推奨)
  • 数値は[-2^53+1, +2^53-1]の範囲
  • オブジェクト中の重複するキー名は禁止
  • オブジェクト中の要素は並び替えても良い
  • トップレベルの要素は、配列かオブジェクトであるべき。
  • 日時表記はISO 8601推奨
  • バイナリデータはBASE64エンコーディング推奨

これらの制限を入れることで、パーサの実装はかなり楽になります。また、値の範囲に制限が設けられることで、データ交換において厳密性が向上することにもなります。

しかしながらJSONのパーサは既に数多く開発されているという現実を見ると、データ交換の厳密性向上という点を考慮してもI-JSONを積極的に採用していくケースはあまりないのではないかなあ、という気がしてしまいます。

読了: 土井雪広「敗北の無い競技: 僕の見たサイクルロードレース」

年末年始の休暇中に、土井雪広「敗北の無い競技」を読みました。

敗北のない競技:僕の見たサイクルロードレース

敗北のない競技:僕の見たサイクルロードレース

自転車ロードレースの選手としてヨーロッパで活躍し、現在はTeam UKYOに所属している選手の自伝です。自転車ロードレースが日本国内においてあまり認知されておらず、ファンの間であっても情報が圧倒的に不足している状況への危機感を至る所で吐露しています。また日本で活躍するプロロードレース選手への発破の意味もあるのか、自身がヨーロッパで行っていた練習の様子などをつぶさに書いています。

ファンの人が読むと面白い (怒る人も居るかも) と思いますが、ある程度自転車ロードレースを見ている人向けに書かれた本でした。本書の中でも書かれている通り、国内での自転車ロードレースの認知度はまだまだ高くないのが実情なので、あまり万人向けではないかもしれません。

最近は弱虫ペダルの人気のおかげもあってか、自転車ロードレースの認知度が向上しつつあるので、もしかすると10年後は状況が変わっているかもしれません。2020年には東京オリンピックも控えているので、そうあって欲しいところです。

一年の終わりに 2014

大晦日です。去年も一年の終わりに一年の終わりにというタイトルでブログのエントリーを起こしていたので、今年も少しは一年を振り返ってみることにします。

昨年に引き続きあまり走らない一年間になってしまいましたが、レース数だけはどうにかこなしていたような1年でした。このままレースごとの記録は下がり続ける一方なのかな……、と思っていましたが、後半にさしかかって少しずつ挽回できるようになってきました。結果的に今年は踏み留まる一年間にできたので、来年は過去のベストに近づけるような形にしていきたいです。

ここ3, 4年間は、目先の1年間をどうにか過ごすのに精いっぱいでしたが、ここ最近は1, 2年先くらいまでは見通して活動出来るようになってきたような気がしています。20代前半くらいまでは3年先を見通すことを心がけていたような気がするので、またその位のスパンで物事を考えるくらいの事が出来ると良いです。

例年、年頭には新年の抱負を掲げるようにしています。年頭に掲げた新年の抱負は、

  • たくさん(一人)旅行に行く。旅費は出来る限り安く上げる。
  • 夜は温水プールに通う。おっきいお風呂に入りたい。
  • 趣味のプログラムでは500行を超える物を書いてはいけない。

の3点でした。達成できない理想よりも達成可能な計画をという事を念頭に置いて、出来るだけハードルを下げようとした結果、こういう形になりました。1点だけ補足すると、最後の抱負は「多産になる」というつもりで書いた物でした。

一年を通じて達成し続けられてはいないという所に不満が残りますが、一年のある時期に一定の力を注いで取り組むことが出来たという点においては、概ね達成できたように思います。旅行には、日程的, 体力的, 金銭的に多少無理をしてでも行くようにしていました。つい最近を振り返ってみると、12月は毎週末家を空けていました……。円安になったこともあるのと、来年7月でパスポートの有効期限が切れてしまうので、来年はそれほど旅行には行かないことでしょう。プールは大浴場目当てに寒い時はよく行っていたのですが、夏場を過ぎてから少々足が遠のいてしまいました。プログラムについては多産にしたいと思っていたほどには多産にはならなかったのが反省ではあります。

来年も良いお年をお過ごし下さい。

2014年の走行距離

12月31日は帰省していて走らないことが確定しているので、今年の年間走行距離が確定しました。

年月 Run Bike Swim
2014年01月 7.5km 12.5km
2014年02月 21.2km 4.5km
2014年03月 70.6km 12.2km
2014年04月 95.0km 47.3km 11.5km
2014年05月 37.3km 38.6km 8.3km
2014年06月 63.6km 122.6km  
2014年07月 73.6km 5.2km
2014年08月 38.3km 39.7km  
2014年09月 36.5km    
2014年10月 43.3km 88.1km 7.9km
2014年11月 106.8km 53.3km  
2014年12月 100.6km 1.0km
2014年合計 694.3km 389.6km 63.1km

今年はついにランが1,000kmを大きく割り込んでしまいました。全く練習で走らない期間があったので当然と言えば当然ではあります。しかしながら冬場になってマラソンのレースが増えてきていることもあり、練習でも少しずつ走り出しました。どうにか月間150kmくらいを走るところまでは頑張りたいところです。

バイクはレース以外で乗ったのは2度だけでした。それに加えて11月にローラーで何回か乗ったきりです。60kmを越えると膝に来
ことが分かっているので、本来はロングライドを増やして長距離に耐えられる身体を作らなければいけないところではありますが、なかなかその為の時間を取れていません。

スイムは2014年前半に熱心に取り組んでいました。しかしながらこちらも夏を過ぎる頃になると、あまり通わなくなってきてしまっています。冬になると大きなお風呂が恋しいので、また通いだしたい所ではあります。最近夜の時間をプールよりも勉強に充ててしまっているので、今後どうやって時間を捻出しようかというのが目下の課題です。

http://instagram.com/p/mcCCvlwowM/

読了: 伊坂幸太郎「死神の浮力」

12月6日のセールで売っていたので購入して読んでみました。元々伊坂幸太郎さんの作品には興味があったという事もあって、良い機会でした。

死神の浮力

死神の浮力

読むのが嫌になるという感じではなかったけれども、あまり「面白かった」という感じはありませんでした。淡々とストーリーが流れていったというだけだったという印象を受けました。
レビューを読んでいると「死神の精度」の方が評判が良いらしいので、そちらも読んでみようと思います。

死神の精度 (文春文庫)

死神の精度 (文春文庫)

第63回 大田区ロードレース大会

2014年12月23日に東京都大田区大井埠頭中央海浜公園陸上競技場で行われた、第63回 大田区ロードレース大会に出場しました。

種目 一般男子10マイル39歳以下 (10マイル≒16.1km)
グロスタイム 1時間24分30秒
ネットタイム (手元の計時) 1時間24分17秒
種目別順位 61位

http://instagram.com/p/w75lLnQo5h/

この大会は2009年から2012年までも参加していました。今までの記録の推移は、

2009年 1時間35分34秒
2010年 1時間22分13秒
2011年 1時間14分20秒
2012年 1時間15分39秒
2014年 1時間24分30秒

というような形で推移しています。一昨年の記録を見ると、普通に平均ペースが5分を切っていて、過去の自分凄いなーと感心させられます。

レース前にコンディションの発表があり、気温10℃とのこと。この季節の10時にしてはやや暖かめとなりました。アームウォーマーと手袋をつけてレースに臨んだのですが、アームウォーマーは要らなかったかもしれません。

陸上競技場の周りを5周するこのコース。レースでは、走り始めて最初の2周はおそらく調子も上がらないだろうし、様子見で行こうと思っていました。入りの2 mileは17分。直前の練習であまり具合が良くなかったので心配していたのですが、今日は特に問題も無く。予定では3周目で抜かれるくらいの想定をしていたのですが、2周目が終わるあたりで先頭の選手に追い抜かれたのには少し動揺しました。

4周目くらいからようやく調子が上がってきたので、ペースを上げていきました。このあたりで最後尾の選手を周回遅れにすることが出来るようになってきて、周回遅れの選手を目指してペースを上げて走っていくような形でペースを上げていきました。その結果、4周目と5周目は16分台。最後はトラック内でラストスパートをかけてゴール。

一昨年と比べるとタイムが落ちてしまっているのがどうしても気になってしまいますが、まあそれはそれ。フルマラソンのダメージももはや全く残っていないことが確認できたので、年末にしっかり走り込みたいと思います。

Lap 距離 (mile) 距離 (km) Lap Time
Lap 1 2 mile 3.2km 17分17秒
Lap 2 4 mile 6.4km 17分00秒
Lap 3 6 mile 9.6km 17分01秒
Lap 4 8 mile 12.8km 16分38秒
Lap 5 10 mile 16.1km 16分19秒

ntpdateを置き換えようとするtlsdate

ntpに脆弱性が発見されました。NTPのSecurity Noticeのページによれば、軽微な脆弱性がまだ2件残されているそうです。

それに呼応して、Don't update NTP – stop using it - Hanno's blog、「NTPを捨ててtlsdateを使おう」という主張を見かけました。今回の脆弱性の原因はバッファーオーバーフローや実装ミスにあるのでNTPというプロトコル自体が悪い訳では無いのですが、この機会にsecureなプロトコル&ソフトウェアを利用するようにしよう、という主張のようです。今までtlsdateなる物を知らなかったので、はてどんな物なのかと思いソースコードをあさってみました。ソースコードgithubリポジトリがあります。

tlsdateの仕組みはこんな感じです。TLSでは通信路確立時に、まずクライアントがサーバーに対してClientHelloメッセージを送信します。するとサーバからServerHelloメッセージが返ってくるのですが、そのメッセージにはgmt_unix_timeフィールドに現在時刻が含まれているので、これを時刻合わせに用います。このあたりの処理は、tlsdate-helper.cのrun_ssl()に書かれています。肝心の箇所を以下に引用します。

  if (0 != ssl_do_handshake_part (&ssl))
    die("SSL handshake first part failed");

  uint32_t timestamp = ( (uint32_t) ssl.in_msg[6] << 24 )
                     | ( (uint32_t) ssl.in_msg[7] << 16 )
                     | ( (uint32_t) ssl.in_msg[8] <<  8 )
                     | ( (uint32_t) ssl.in_msg[9]       );
  check_timestamp (timestamp);

もちろん単純にServerHelloに入っている時刻をそのまま利用するとパケットの送信遅延によりズレが生じてしまうので、RTTの計測も別途行われています。

なお、ChromeOSでは、既にtlsdateがデフォルトのnetwork time clientとして利用されているようです。