六帖Webアプリに、FareMapを追加した。思ったよりも進まなかった。
・DB読み込み、データ構造作成
・座標情報を基に線路描画
・最短経路予想機能
・運賃計算(東京メトロ分のみ)
まで完成した。ただこの最短経路予想、都心部ではやはり乗り換え過ぎてしまい本当の最短経路になりにくい。まだ無限ループを防ぐ機能がなく、まだ試していないが全駅を対象にすると無限ループになる可能性がある。
線路描画はそれなりの形になったけれど、駅が密集している部分では駅名が重なってしまっている。これは編集機能を付ければなんとなかるだろう。
まだ実装しなければならないのは
・最安値経路算出
・路線図編集・保存・読み込み機能
・運賃一覧表示
・さらなる路線の追加、メトロ都営直通割引、JRの複雑な運賃計算
先は長い。日曜だというのに本業より遥かに面白いからのめり込んでしまって、疲れた。
月別: 2014年4月
FareMap(仮称)
地下鉄が複雑すぎるので、経路の組み合わせが天文学的に増えるおそれを解消するため、まず経路の予想を立ててから計算しよう、と考えた。
1.駅情報に、運賃計算のための営業キロに加えて、緯度と経度を導入する。
2.まず最短経路予想をする。始点から終点までの緯度と経度を比較して、上りと下りどっちに進めば目的地に付きそうかを判断しながら、1本経路を作る。
例えば丸ノ内線新宿駅から半蔵門線半蔵門駅に行きたければ、新宿と半蔵門を比較すると半蔵門は東北方向にあるから荻窪行きではなく池袋行き方面に進めばいいだろうなぁ、と予想する。
で、最短経路の運賃を先に計算しておく。
3.乗り換え駅ごとに分岐して経路探索する。ただし、探索中に最短経路の運賃をオーバーしたらそこの経路は捨てる。
4.乗り換えのない終点駅について、しかも目的地に到達しない経路は捨てる。
5.最短経路より運賃が安い経路があったら、最安値を更新してそれより運賃の高い経路を全部捨てる。
以上で、計算量をかなり減らせるのではないか。まず東京メトロ版から作ってみようと思う。
出勤
1か月に1回の東京への出勤日。今日は土曜なので、平日と小田急の客層が違う。平日は都心へ向かうリーマンばかりだが、今日は学生風ばかり。社内でスマホを見てる人の率が20%→40%と大幅に増える。本を読んでいる人の率は30%→10%に大幅ダウン。でも一番多いのは、寝てる人。
1時間半程度電車で過ごした後、職場まで徒歩25分。長距離通勤するのは、今日が最後となる。
仕事終わった。長時間嫌気がさしてくる中、次のようなことを妄想していた。
運賃表が欲しい。
駅に行くと、路線図と運賃一覧が書いてある表、あれ。
理想としては、路線図上の駅をクリックすると他のすべての駅に一度に運賃が表示されるのがよい。
昔JRでしかも首都圏に限ればあったんだけど、消費増税とともに公開停止してしまった。
主に必要な機能は、
・路線図の作成、保存
・運賃の計算
の2点。
どちらも複雑で大変だ。路線図は、ドラッグ&ドロップして線路を配置するような、凝ったGUIにしてみたい。
運賃計算は、田舎なら楽勝だけど都心の地下鉄網となると、乗り換えのパターンが膨大なのとJRの特例計算てんこ盛りなので、どこまでできるだろうか。検索したら大学の論文になってるくらい難しいようだ。論文だけ見ると簡単なif文があるだけのように見えるけれど。
JRだけでなく首都圏の鉄道全部を盛り込んでみたいものだ。
仕事多過ぎ
4日連続で12時間程度労働になりそうだ。偶数年の4月は仕事が増えるのは仕方ないとしても、多すぎる。
朝6時や夜22時に仕事を振るのはやめてほしい。
仕様変更
Ruby On Rails Tutorialが一向に進まない。
さらに、無料サーバーのHerokuの仕様を調べたところ、なんとデータベースが1万行までしか記録できないらしい。それは致命的だ。
これでは将来困るので、言語学習用ソフトはやはりJavaScript+PHPでの開発に切り替えた。
とはいえ、EclipseとGitの存在を知ったことは大きな収穫だった。いままでメモ帳で開発してたもんな。
仕様メモ
せっかく公開するので、マルチユーザー対応にしたい。なので、ユーザー名+パスワードでログインする形式にする。
[LTUser] ユーザー
UserID
UserName
Password[LTTable] テーブル名
UserID
TableID
TableName[LTElement]単語・意味・例文の1要素
UserID
TableID
ElementID
Word 単語
Meaning 意味
Example 例文[LTLog]学習履歴
UserID
TableID
ElementID
Correct 正解したかどうか
Time 日付(年月日で十分)
[主に必要な機能]
ログイン機能
単語の登録
問題提出機能、ロジック
統計機能
特別支援相談室4日目、引っ越し準備1日目
今日は午後から特別支援相談室に子供たちが通った。
一番下の子の、体の動きの発達が遅いので、今日は作業療法士さんに2時間もみっちり体を動かす遊びをしていただいたそうだ。
自治体にはお金がなく、作業療法士さんはボランティアとのこと。
毎日仕事をしている六帖の部屋は、物置と書庫も兼ねている。5年経つうちに、床の足の踏み場がなくなるほど散らかってしまった。この部屋に引っ越しの荷物を詰めることになるので、片付けないといけない。今日は足の踏み場を作って、段ボールをいくつかおけるようなスペースを作った。
CDレビュー: Virgil Fox – Encores (RCA)
★★★★☆
Living Stereo 60 CD Collectionの42枚目。
オルガニスト、Virgil Fox によるオルガンリサイタル。オルガンって、まるでタイムスリップしたエレクトーンみたいだ。華やかで美しい音が出る。
有名どころのG線上のアリアや小フーガを押さえつつ、12曲目のシャルル=マリー・ヴィドールのSymphony No. 5 In F Minor Op. 42 No. 1 – Toccataの超キラキラに感動したら、最後は威風堂々。何回聞いてもワクワクする曲だ。中間部からメインテーマに向けて上昇してい所なんか特に。
お勧めの一枚。
クラシックの他のCDレビューはこちらです。rokujo.hatenadiary.com
今日も残業
やっと残業が終わった!昨日今日と、労働時間が12時間だ。それも、自宅作業なので集中して12時間ではなく、家事や用事などの時間が入るので一日まんべんなく労働することになり、疲れる。
本日、引っ越し業者が見積もりにやってきた。価格は税込みで20万程度。2トン車+3トン車になるそうだ。距離が80kmくらいあること、祝日であることから考えて、妥当な値段か。いままで11万や15万でやってくれた業者もあったけど、約束の時間を3時間遅れて深夜までかかったり、トラック2台のはずが1台になって人員も半分、2往復して時間が2倍かかった、など散々な目にあったことばかりなので、安かろう悪かろうなのだろう。
1日で引っ越しをせず、2日に分けると何故か2万円安くしてくれるという。2日に分けたほうが人件費がかかるのでは、と尋ねたら、1日目は他の現場からやってきて、2日目は引っ越し後に他の現場に行くのだという。あちらは2日で3件の引っ越しができ、こちらは安く上がる。どちらも得をする、ということだそうだ。でも3件作業をする人たちは大変だよな。
C++ reallocはアドレスが変わる
知っている人には当たり前のことかもしれないけれど、デバッグで一度躓いたので。
メモリ容量が足りないからreallocをして容量を拡張しようとすると、なんとポインタの位置が変わってしまう。したがって、
のようなことをしてはいけない。pの中身を他の変数で参照していたら、reallocした瞬間に他の変数が参照している場所が不正な位置になって、下手するとメモリ破壊、アクセスバイオレーションエラーになる。
LPSTR p;
/*何か読み込み処理*/
if(/*バッファ不足*/)
{
p = realloc(p, MAX_SIZE);
}
また、reallocに失敗すればNULLが返ってくるから、pが参照しているアドレスが誰からも見えなくなってしまう。
とするべきだそうだ。
LPSTR p;
/*何か読み込み処理*/
if(/*バッファ不足*/)
{
LPSTR ptmp = realloc(p, MAX_SIZE);
if(!ptmp)
{
/*エラー処理*/
return;
}
p = ptmp;
}