2011年7月15日金曜日

宇都宮山岳三連戦

今週末は、AJ宇都宮が主催する200kmブルベ三連戦に参加します。
普通のコースを200km3日間なら、まあそんなに騒ぐほどでもないのですが、
この三連戦は、ツールの山岳ステージもかくや、というほどのアップダウンです。

BRM716宇都宮200km塩原【山岳】


最高地点が日塩もみじラインのてっぺん1250mくらいと高さはさほどでもないけれど、四回にわたり大きな登りが襲ってくるコースです。
獲得標高は3659m。
去年は日塩もみじラインを往復させられて、最後の大笹牧場への登りはへろへろでした。
今年も何とか牧場の売店が開いている間にたどりつきたいです。

BRM717宇都宮200kmロマンチック片道【山岳】


標高1800m以上の金精峠を越えたあとに、草津温泉、渋峠(標高2160m)まで登ります。
ブルベでの登りゴールは初経験です。
グランツールなら、明らかにポイントになるステージでしょうね。
獲得標高:5310m

BRM718宇都宮200km草津発上毛片道【山岳】


草津から、宇都宮に戻るコースです。
帰りは中禅寺湖方面には行かず、榛名、赤城を登り、柏尾峠経由で帰ってきます。
獲得標高:4385m

明日、金曜日は宇都宮のホテルに泊まります。
1日目のゴール後は、森林公園に近いろまんちっく村泊、2日目のゴール後は草津のユースホステル泊です。
こういうのを走れば、グランツールを走っている選手の大変さの一端が分かるかな?

精々頑張ってきます。

いつもどおり、LatitudeはONにします。
山の中ばかりなので、精度は低いでしょうけど。
休憩時に電波が入れば呟いたりもするかも知れません。

2011年7月13日水曜日

ブルベのコース難易度

お遊びで、ブルベのコース難易度を計算する式を考えてみました。
まずは、PBPのコース難易度をば。



何をやっているかと言うと、
まず、コースは登りと下りしかないものと仮定します。
登りと下りの平均斜度も同じと仮定します。
その仮定のもとで、コース中の登りの平均斜度を求めたものを難易度としています。
そんないい加減なものアテにならんわ、という声が聞こえてきそうなので、確からしさの検証などしてみます。

BRM604福岡600の難易度を同じ手法で計算してみます。
まずはコースプロフィール。

計算結果は以下の表のとおりです。


コースプロフィールどおり、最初の嘉麻峠~阿蘇が非常に難易度が高く出ています。
問題はその後です。
阿蘇のあまりの高さに、残りはほぼ平坦のように見えるのですが、島原の海岸線は細かいアップダウンが続き、コース難易度的にはかなり高いです。
これが数字になって現れていれば、結構信憑性の高い数字なのではないでしょうか。

Stage4、Stage5と、難易度としてはかなり高い数値が出ています。
特にStage5は最高地点が121mにも関わらずしっかりと高い数値がたたき出せています。

遊びでやってみた割りには結構いいんでない、これ?

そういう目で見ると、PBPのコース難易度は総じて低めです。
1200kmという距離だけが問題で結構イージーなのかしら?

とか悦に入ってみたところで、風向きや天気など気象条件でコース難易度が大きく変わるのがブルベ。
ちょっとした指標にはなるかも知れませんが、しょせんお遊びですね。

アホやってないで、週末の支度をしないといかんですね。

2011年7月10日日曜日

計画迷走中

パリでの宿など、計画が定まりません。
とりあえずゴール後の25日、26日、27日のホテルを予約したのですが、
ゴール時間が24日の夜間になりそう…。

前半の宿が事情あってキャンセル不可になってしまったので、いろいろ迷ってますが、
やはり拠点になるアパルトマンが欲しい。
ということで、短期ステイのアパルトマンを探すことにしました。

18日にパリ着で19日にツール・ド・フランスで有名な峠にどこか走りに行こうかと思っていたのですが、18日の宿がベルサイユ近くなので、どうにも移動し辛いなぁ…。
1200km走って帰ってきたあと、どこか走りに行く気力があるかも疑わしいし…。

19日は素直にベルサイユ見物で、残りはパリ見物かな。

とか、PBPで悩んでいる間に、Flecheの申し込みは始まってるし、宇都宮3連戦は次の週末だし。
なんだかてんてこ舞いだ~。

2011年7月9日土曜日

G'zOne IS11CAキャンセルしちゃった。

ようやく入荷日、価格の電話がありました。
入荷日は7/14、 お値段は75000くらい(よく聞かなかったので、端数は忘れちゃった)。
月々1500円の2年払いって言ってたけど、ホントかな?
それだと、実質36000円だけど?AUってそんなんあったっけ?

まあいいや。
発売を待っている間に、GLOBAL DATAの存在を知ったことや、Xperia activeの発表、やはり、Galaxy S2に比べるとかなりスペックが落ちることから、購買意欲が急低下。

結局、今回は見合わせることにしました。

docomoからXperia activeが出るのが一番理想的ですね~。
まあ、AUでもいいですけど。

とりあえず、PBPはガラスにヒビの入ったGalaxy Sを連れていきます。

前へ

ようやく動くものができました。
会社でも1日PCとにらめっこ、家に帰ってもPCはやはり疲れますね。

ベースにしたプログラムは、日本Androidの会のHP上にある、勉強会資料です。
頭から読んでその通りにプログラムすれば、GPSで現在地を表示するところまでは簡単にできるので、割愛します。

自分が作りたかったのは、地図表示ではなく、現在地が移動したら、累積距離を積算し、画面表示するプログラムです。

まず、画面上に累積距離を表示する領域を設けます。
res/layout/main.xmlを以下のように編集します。


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:background="@android:color/white"
android:textSize="12pt"
/>
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="*******************"
/>
</LinearLayout>

日本Androidの会のプログラムに対して追加したのは、TextViewです。
これで、マップ上部にテキスト表示領域が設けられます。

次に、HelloGpsActivityクラスにフィールドを追加します。

float totalDistance = 0;
Location old_location = null;

距離を求めるための旧位置情報を残しておく変数と、累積距離をとっておく変数です。

次に、新しい位置情報と古い位置情報、累積距離を引数にして、表示領域に累積距離を表示するメソッドを追加します。
何の機能を担っているのかイマイチ不明になってしまいますが、戻り値で更新した累積距離を戻すようにしました。(動けばいいんです、動けば…というか関数化必要ないかも?)


private float addTotalDistance(Location n,Location o,float td){
      TextView textView = (TextView)findViewById(R.id.TextView01);
      if(o!=null){
        td += n.distanceTo(o);
      }
      textView.setText(Float.toString(td)+" m");
      return td;
}

後は、位置情報更新のたびに呼び出されるメソッドで、追加したメソッドを実行し、メンバ変数の旧位置情報を上書きするようにするだけ。

this.totalDistance = addTotalDistance(location,this.old_location,this.totalDistance);
this.old_location = location;

外をうろうろしてみると、積算距離が加算されていきます。


ソースコードはこんな感じ

package jp.hews.hellogps;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.ZoomControls;
import android.widget.TextView;

public class HelloGpsActivity extends MapActivity implements LocationListener {
   /** Called when the activity is first created. */
   //フィールドを追加する。
   MapController m_controller;
   float totalDistance = 0;
   Location old_location = null;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      // 現在位置が変化したら、このメソッドが呼び出されるように登録する。
      LocationManager l =
         (LocationManager)getSystemService(Context.LOCATION_SERVICE);
      l.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

      // マップに現在位置を表示する。
      MapView m = (MapView)findViewById(R.id.mapview);
      m_controller = m.getController();
      m_controller.setZoom(15);

      @SuppressWarnings("deprecation")
      ZoomControls zc = (ZoomControls)m.getZoomControls();

      zc.setLayoutParams(new ViewGroup.LayoutParams(
             ViewGroup.LayoutParams.FILL_PARENT
            , ViewGroup.LayoutParams.FILL_PARENT));
      zc.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
      m.addView(zc);
   }

   private float addTotalDistance(Location n,Location o,float td){
      TextView textView = (TextView)findViewById(R.id.TextView01);
      if(o!=null){
         td += n.distanceTo(o);
      }
      textView.setText(Float.toString(td)+" m");
      return td;
   }

   @Override
   protected boolean isRouteDisplayed() {
      // TODO 自動生成されたメソッド・スタブ
      return false;
   }

   @Override
   public void onLocationChanged(Location location) {
      GeoPoint gp =
         new GeoPoint((int)(location.getLatitude()*1E6),
               (int)(location.getLongitude()*1E6));
    
      m_controller.animateTo(gp);

      this.totalDistance =
         addTotalDistance(location,this.old_location,this.totalDistance);
      this.old_location = location;
   }

   @Override
   public void onProviderDisabled(String provider) {
      // TODO 自動生成されたメソッド・スタブ
   }

   @Override
   public void onProviderEnabled(String provider) {
      // TODO 自動生成されたメソッド・スタブ
   }

   @Override
   public void onStatusChanged(String provider, int status, Bundle extras) {
      // TODO 自動生成されたメソッド・スタブ
   }
}

次は、蓄えておいた距離情報に、累積距離が等しくなったら何らかの合図が出るようにします。

え?
こんな単純なプログラムどこで詰まっていたかって?
いやん、恥ずかしいからナ・イ・ショ。

2011年7月8日金曜日

ブルベ用バイク

ハブダイナモホイール・ライト・充電器を注文してしまいました。
前輪のハブ部分から、コードがフォーク伝いに延びて、NITTOのマウンタにライトがつく予定です。
また、位置は決めていませんが、スマートフォンやGarmin Edge705に給電するための装置をフレームに装着しなければなりません。

自分は今、AnchorのRFX8というカーボンフレームに、ShimanoのDURA-ACEホイールを履かせて乗っています。
コストパフォーマンス重視の構成ではありますが、明らかにブルベなどのロングライド仕様ではなくて、戦闘機です。

今年はレースの予定はないのでいいのですが、レース前にホイールを替えて、配線を取り払い、終わったらまた配線しなおして…と考えると面倒きわまります。
もともとメカいじりなどは余り好きじゃないですし…。

というわけで、ブルベ専用バイクが欲しいなぁ、なんて思っているのですが、ブルベ用の自転車って既存のロードバイクの枠に囚われる必要はないのですよね。

理想としては、カーボンフレームではなくて金属フレームがいいですね。
寿命や故障が分かり辛いカーボンよりは、金属の方が安心感があります。
ホイールも、メーカーの完組みホイールではなくて、手組みの方がいいです。
スポークが折れたら即DNFじゃなくて、何とか走れてしまうくらいのホイールの方がブルベには向いてます。
ブレーキも、軽量と効きのバランスを取ったようなロードバイク用のではなくて、ディスクブレーキがいいです。
リムをガリガリ削ることもないですし、効きがいいので、緊急事態=交通事故のリスクが高いブルベでは重量より安全ですね。

先立つものがなぁ…はぁ。

2011年7月6日水曜日

ちょっと進んだかな。

ずっと放置状態だった、Android開発のお勉強を再開しました。
GPSのLocationを得るのはほんの数行でできてしまいます。

android.location.LocationListener
を実装し、以下の未実装メソッドを追加するだけ。

public void onLocationChanged(Location location) {}

これでAndroid端末の位置情報が変わったというイベントが発生したら、
onLocationChangedメソッドが実行されます。
(ホントかしら?未検証です。)

今のところやりたいのは、累積距離をカウントすることです。
累積距離はとりあえずはメンバ変数に蓄えておくとして、
location間の距離を計算するには、
android.location.Location
のdistanceToメソッドを使用すればいいらしいです。

float distance;
Location old_location

@Override
public void onLocationChanged(Location location) {
      distance += location.distanceTo(old_location);
      old_location = location;
}

みたいに書けば、累積距離を計算できるはず。
ここまではあくまでも頭の中で考えたものなので、はしょってる部分も多いし、そのままじゃダメだと思います(笑

距離の計算には、locationの位置情報から自分で球面距離やら3次元で距離を求めたりなんかをしないといけないと思い込んでいたので、こんな簡単にできるとは、かなり拍子抜けです。

何とか累積距離を表示するプログラム作ってテストするぞ!

2011年7月5日火曜日

PBPに向けて残る準備

エントリ 済
エアチケット 済
ホテル 済
ドロップバッグ手配 済
GPXデータ 済
Edge705用、フランス地図 仕掛中
休暇申請 直属長まで済

一応、向こう行って走るという基本的なところまでは用意できたかな。
フランスの地図はOpenStreetMapがかなり整備されているので使わせてもらいます。

OpenStreetMapとは、GPSデータを基にユーザが作るOpenな地図です。
何がOpenなのかというと、地図データのライセンスがオープンなのです。
例えばゼンリンの地図データを使おうと思うと、ゼンリンにライセンス料を払う必要がありますが、
OpenStreetMapはそんなものは必要ありません。
一見フリーに思えるGooglemapもダウンロード使用は利用規約に抵触します。

最近では自転車に乗るときにGPSログを取得している人が増えているので、是非OpenStreetMapにご協力を。(自分も含め)

でもってヨーロッパ地図をダウンロードしたところまではいいのですが、これをEdge705に入れてみないといけません。
今週末に時間とってやってみます。

後、重要なのは、PBP走行中の荷物の置き場所やDNF対策でしょうか。
荷物はホテルで預かってくれるらしいのですが、DNFしたときや、変な時間にゴールしたときのためにやはりアパートを一室確保しておこうかと考えています。
有志でシェアできるといいんだけど…。

パリ観光も考えないとな~。
旅行ガイドでも買って来ようかしら。
プレで、Mont VentouxL'Alpe d'Huezに走りに行きたいなぁ、なんて思っているのですが、ホテルがパリ中心部から遠いことと、交通費が結構バカにならないので悩み中です。

あ、これまで自分は電子機器への充電は乾電池からのスタイルだったのですが、ハブダイナモに転向です。
今、自転車屋に発注中。
今週末にはできるかな?

2011年7月4日月曜日

これじゃあ、シーラント剤も意味ないよ。

昼過ぎからダラダラ支度して、家を出ました。
いつもの印旛沼コースかな、とぼんやり思っていたのですが、マンネリ気味なので、一般道で千葉NTを目指します。

手賀沼CR~大堀川CR~江戸川CR~酷道国道14号線~国道296号でぐるっと一周して来るコースへ。


千葉県北部ののどかな田園風景を楽しみながら、走ります。












昼を食べずに出てしまったので、下手賀沼手前のコンビニでパン2個を補給。
食べながらLEGONを覗いたりしていると、知り合いがすぐ近くにいるらしいことが分かりました。
Latitudeを使っている知り合いなので、もしかしてONにしているかな?
と立ち上げてみると、現在地が分かりました。

いや~便利です。
迷ったり、追走することもなく、ルート上で会うことができました。

知り合いは江戸川CRまで帰る途中だったので、手賀沼CRを話しをしながらダラダラと走りました。

江戸川で別れてから、国道14号線に入り、原木の交差点に差し掛かったとき、何か金属を踏んずけた音がして…パンクです。

釘のような金属の棒がタイヤの真ん中から側面まで貫通しています。
シーラント剤もなすすべなし。
写真撮っとけば良かったな…。
タイヤに穴が開いてしまったので、裏からパッチをあてて、チューブ交換して帰ってきました。


走行距離:89.68km

2011年7月1日金曜日

GLOBAL DATA

自転車で知り合った熊坂仁美さんに、彼女が海外に行くおりに使っている、ローミングアクセスを提供するサービスを紹介してもらいました。

グローバルデータという会社のサービスで、wifiルータとSIMカードを空港で貸し出し、帰りも空港で受け取ってくれます。

お値段は、事前予約しておけば、1280円/日。7.2GBの使い放題。

向こうでSIMカードを買うのも面倒なので、AUのローミングアクセスでいいかな?
なんて考えていたのですが、AUのグローバルパスポートは2段階の定額制で、1980円/日が25MBまで。越えると従量で2980円が天井のサービスです。

コストパフォーマンス、圧倒的じゃないですか…。

フランスでもこれで決まりですね。
wifiルータにどう給電するかだけが問題かな。
SIMカードをそのまま使えるなら、GalaxySに突っ込んじゃえばいいし。

となると、悔やまれるのはGalaxySのガラス割れ…どうにかならんもんでしょうか?
と、分解サイトなど眺めてみましたが、GalaxySのガラスは圧着らしく、どうにもなりそうにありません。
こうなったら、Xperia activeが日本でも発売されるのを期待して待つかなぁ。
GalaxyS2が新規で実質負担額35000円程度というのにも惹かれますが…。
う~ん。
発売日がずるずる延びるうちに、G'z one熱が冷めつつあります。

あ、熊ちゃん、情報提供ありがとうございます。
こんなサイト見てないだろうけど(笑
お礼に、熊ちゃんが代表をしている、ソーシャルメディア研究所のリンクを貼っておこう。
100弱/日のBlogに宣伝効果なんて期待できませんけどね(笑