2009-02-02

神奈川マラソン

神奈川マラソンの 10km の部に参加してきました。ほとんど練習していなかったので、朝まで辞めようかなぁと思っていました。ですが、じゃあいつになったら練習するんだよ、とセルフつっこみして出発。埋め立て地の海沿いを、変則1往復するフラットなコースです。風は強かったのですが、暖かくて走りやすい。



スタートは首都高の磯子あたりで、そのまま首都高の下を南下。IHI の敷地内に入ってから折り返し。ここでだいたい 2km くらい。トイレに行きたくなり、IHI のトイレを借りる(使ってよいトイレ)。ここで振り返ると後ろから自転車が来ます。なんだろうと思ってみて見ると「最終走者」と。えー! コースは来た道をもどり再び磯子料金所あたりへ。



ゴール地点を横目に(ここでだいたい 4km)、そのまま北上。1.5km ほど高速道路の下を走り続けます。新磯子の交差点を右折 - 地図上では南東へ - して、ヨットハーバーを横目にずーっと海沿いを道なりに走る。直角コーナーが3箇所あって、その先の火力発電所の手前で折り返し。ここで、だいたい 7km。



制限時間の 70分でゴールするつもりだったので、ここまではひたすら、自重してました。7分/km くらいのペースより速くならないように、とペース落としてました。で、気づいたのですが、人数が多いレースなので、レースが始まってからスタートラインを超えるまでに、3分くらいあったのです。ネットタイムで 70 分でも、トータルタイムだと 73分かかってしまって、強制棄権では?と思い始めたわけです。



やべぇ。というわけで、少しペースを上げました。6分/kmくらい。これでぎりぎり遅れを相殺できるはず。何やら膝が痛くなってきましたが。普段、自動車が走っている道路が閉鎖されていて、フラットで、ちくしょう自動車はいつも、こんなに走りやすい道を走っているのか、という気分です。そんなこんなで、69分でゴール。あー膝が痛い。



2009-01-26

Python 3.0 のアノーテーション

Python Code Reading でアノーテーションがちらりと話題になりました。関数定義で

def func(a: expr, b: expr, ...) -> expr

という記述の仕方ができる、というもの。で、こうやって書いた expr は関数オブジェクトの __annotations__ プロパティに辞書で格納されます。

>>> def foo(a:int, b:"hogehoge") -> str: pass
...
>>> foo.__annotations__
{'a': <class 'int'>, 'b': 'hogehoge', 'return': <class 'str'>}

この構文を function annotation というそうです。で、アノーテーションに書かれた式の値が辞書に入るだけで、別に Python が静的に型チェックをしてくれるというわけではないです。一般に Python 関数定義では戻り値の型をコンパイル時に特定することはできませんから。



じゃあ何に使うのかと言うと動的型チェックをテスト時や運用時にするとかでしょう。他にも PEP 3107 にはIDE で関数の引数や戻り値を表示させるとか、その他 inspection のアプリケーションっぽいことが挙げられています。



戻り値の型チェックは、こんな感じでしょうか。

>>> def check(func):
    def call_and_check(*args, **kw):
        result = func(*args, **kw)
        if not isinstance(result, func.__annotations__["return"]):
            raise TypeError
        else:
            return result
    return call_and_check       



@check
def foo(x:int) -> int:
    return x



print( foo(1) )
print( foo("1") )
... ... ... ... ... ... ... ... >>> ... ... ... >>> 1
>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in call_and_check
TypeError

引数の型チェックは、ちょっと面倒ですね。*args に入ってくるのか、**kw に入ってくるのかの場合分けなんかが死ぬほど面倒くさそうです。継承されたメソッドがきちんと規約に合っているか、とかなら簡単にチェックできそうです。



2009-01-19

Penta5n - トライアスロンのトレーニング管理できるウェブサービス

トライアスロンの練習記録はどこに書いておいてもよいのですが、ジマンパワーを活用するには公開できたほうがよいです。で、作ろうかなぁと思った矢先に発見。



Penta5n はトレーニングやレースの記録を保存できるウェブサービスです。トライアスロンを想定しているので、スイム、バイク、ランにわけて記録できます。グラフ表示するときも、日ごとの表示はもちろん、積算距離も出ます。



他の機能としては、トレーニングのコーチを生業にしている会社のようで、プランニングなる機能もあるようです。が、どうもエラーが出たり、次へ進むボタンが表示されなかったりです。そのうち直るでしょう。あとライバルの登録や、VO2Max なんかを記録することもできます。ふむふむ。



iPenta5n という iPhone アプリもあって、こちらは GPS を使って走行コースの保存もできるようです。そのうち iPhone とウェブのアプリ統合もされるそうです。



しばらく使ってみようと思います。