Mechanize を DreamHost で

DreamHostRuby Mechanize をインストールしようとしたら libxslt がなくてハマった orz

libxslt-1.1.26 をソースからインストール。ついでに確認したら /usr/lib/libxml2 のバージョンが 2.6.27 と古かったので libxml2-2.7.6 もインストールした。gem install のときにライブラリパスを指定する。

んで、Mechanize 0.9.3 をインストールして動かしてみたら instance_variable_defined? メソッドがないって怒られた。Ruby 1.8.6 で新たに導入されたメソッドなのだが、DreamHost に入ってる Ruby は 1.8.5 だった orz 自前で Ruby 1.8.7 を……などと yak shaving にのめり込む気はないので、サクッとあきらめて Mechanize 0.9.2 を入れ直した。

んでんで、レールどこなびを解析させてみたら中身が入ってこない。どうやら EUC-JP の解析でコケてる模様。JIS 内の文字でもダメぽ。決め打ちフック追加でしのぐ。

ダイヤグラム閲覧サービスってないよね?

携帯でダイヤグラムが見れたら撮り鉄歓喜じゃね?

先行事例

任意の路線のダイヤを web でリアルタイムに提供するシステムはなさそうだ。

要素技術

サーバーサイドでベクター図形を生成するライブラリがあればよい。

クライアントサイドで Flash という手もあるかもしれないけど携帯対応を考えると面倒そうだ。

データソース

待避・交換を含むダイヤをきちんと描くには全停車駅の着発時刻が必要。

できれば秒単位の時刻、通過駅の時刻、回送/貨物列車の時刻も欲しいけど、なかなか網羅的かつ再利用可能な形では公開されないわな。

想定される問題

駅のプロット間隔
均等にするのが一番簡単だが、停車駅の時刻だけでプロットすると通過列車と交差する可能性が高い。駅間距離に比例させるのが次に簡単だが、時刻表データと駅間距離データを同時に取れるデータソースがないので、それぞれ取ってきてマージする必要がある。駅間の標準所要時分に比例させるのが最も正確だが、時刻表データから標準所要時分を算出するには運転停車を取り除くなどの統計的処理が必要になる。いずれにせよ通過駅の時刻が手に入らない限り矛盾が生じる可能性はゼロにならないわけで、どこかで妥協が必要だろう。
スケーリング
小さな画面で意味のあるダイヤグラムを表示させるのは難しい。特に携帯ではインタラクティブに拡大縮小させるのが難しいので、画面サイズと列車密度に応じて最適なプロット範囲を決めたり、範囲が広いときは適当に間引いてプロットするようなアルゴリズムが必要になりそうだ。