Mechanize を DreamHost で
DreamHost に Ruby Mechanize をインストールしようとしたら libxslt がなくてハマった orz
- http://forum.dreamhosters.com/3rdparty/119253-Real-Trouble-Trying-To-Install-Gem-with-Native-Ext.htm
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 を入れ直した。
- gem で古いパッケージをインストールする方法 → http://docs.rubygems.org/read/chapter/16
んでんで、レールどこなびを解析させてみたら中身が入ってこない。どうやら EUC-JP の解析でコケてる模様。JIS 内の文字でもダメぽ。決め打ちフック追加でしのぐ。
ダイヤグラム閲覧サービスってないよね?
先行事例
- 新幹線時刻表検索(ダイヤグラム) (Web、新幹線のみ)
- WinDIA (Windows 3.1)
- OuDia (Windows)
- DrawDia (MacOS Classic)
- CocoDia (MacOS X)
- ydiakun (Linux X)
任意の路線のダイヤを web でリアルタイムに提供するシステムはなさそうだ。
データソース
待避・交換を含むダイヤをきちんと描くには全停車駅の着発時刻が必要。
できれば秒単位の時刻、通過駅の時刻、回送/貨物列車の時刻も欲しいけど、なかなか網羅的かつ再利用可能な形では公開されないわな。
想定される問題
- 駅のプロット間隔
- 均等にするのが一番簡単だが、停車駅の時刻だけでプロットすると通過列車と交差する可能性が高い。駅間距離に比例させるのが次に簡単だが、時刻表データと駅間距離データを同時に取れるデータソースがないので、それぞれ取ってきてマージする必要がある。駅間の標準所要時分に比例させるのが最も正確だが、時刻表データから標準所要時分を算出するには運転停車を取り除くなどの統計的処理が必要になる。いずれにせよ通過駅の時刻が手に入らない限り矛盾が生じる可能性はゼロにならないわけで、どこかで妥協が必要だろう。
- スケーリング
- 小さな画面で意味のあるダイヤグラムを表示させるのは難しい。特に携帯ではインタラクティブに拡大縮小させるのが難しいので、画面サイズと列車密度に応じて最適なプロット範囲を決めたり、範囲が広いときは適当に間引いてプロットするようなアルゴリズムが必要になりそうだ。