最近のトラックバック

2009年11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
無料ブログはココログ

« 2008年11月 | トップページ | 2009年1月 »

2008年12月31日 (水)

ダイヤグラムビューに、[停車駅明示]機能を試作

OuDiaのダイヤグラムビューに、[停車駅明示]機能を試験的に追加してみました。

これは、ダイヤグラムビューの列車線上の停車駅に○印を描画するというものです。
現在の試作品のイメージは以下のようなものです。

[停車駅明示]機能

この機能は実は、およそ3年前、初期のOuDiaを公開した頃以来、何人かのユーザーの方からあった要望です。
しかし、僕自身が積極的に使いたいとは今一つ思えなかったので、なかなか着手できませんでした。

この機能に消極的だった理由は、以下のようなものでした。

  1. 実物のダイヤグラムの多くは、停車駅を明示するようなことはしていない。
  2. 停車駅は、列車種別毎に決まっているので、ダイヤグラムで明示する必要もないのではないか
  3. 下り列車と上り列車が駅ですれ違う場合、停車なのか通過なのか分からなくなるのではないか?

特に、3. に関しては「本当に使いものになるのか?」と思っていました。

この気持ちが変わったのは、この8月にアメリカ旅行に持参するために

 を作成したときでした。これらの路線のダイヤは、はっきりした列車種別というものがなく、列車ごとに停車駅・通過駅がバラバラなんですね。
このようなダイヤでは、 ダイヤグラム上で停車駅を明示しないと不便だなあ・・・と実感しました。(改めて考えると、JR東日本の新幹線もこれに近いダイヤですね)

試作をしてみると、3. の問題点は案の定でした。とはいえ、今のOuDiaのダイヤグラムビューには下り列車のみ・上り列車のみの表示を行うことができます。この機能を併用すると、下りと上りが交差したときの問題は、ある程度は避けられるかな・・・と思いました。

これとは別に、「[停車駅明示]機能が有効になっていると、ダイヤグラムビューの表示処理が結構重くなる」という問題点も分かりました。特に、大手私鉄のダイヤを表示させてみると、大量の○を描画するのに時間がかかる様子が目視できるほどです。

と、そういったことを踏まえたうえで、この機能についてはもう少し試用をして、様子をみたいと思います。

今日は大晦日。おそらくこれが今年最後の記事になると思います。みなさま、どうかよいお年をお迎えください。 

VC++2008で _mbclen() 関数が誤動作

Visual Studio 2008 の VisualC++ で、画面に表示した文字列が文字化けするという問題に出くわしました。

原因を調べてみたところ、_mbclen() という関数が誤動作していることが分かりました。

_mbclen() 関数は、文字が1バイト文字か2バイト文字かを判定する関数です。
補足しますと、『1バイト文字』とは、1バイトで表すことのできる文字です。半角英数字・半角カタカナがこれに含まれます。これに対して、2バイト文字とは、1文字を表すのに2バイトを必要とする文字のことです。漢字はすべて2バイトに含まれます。

この_mbclen()関数が、"武"という文字を1バイト文字と判定していました。これが原因で、プログラムが文字の境界を誤判定して、文字が化けていました。

さらにいろいろ試してみると、どうもプロジェクトのプロパティで

 プログラム全体の最適化:リンク時のコード生成を有効にする

という項目を選択していると、誤動作することが分かりました。

「最適化を有効にするとプログラムが誤動作する」というのはおそらく、プログラムの側に問題があると思われますが、今のところ原因がはっきりしません。僕ももう少し調べてみるつもりですが、どなたか、同じような経験をなさった方はいらっしゃいませんか?

2008年12月23日 (火)

JScriptに苦戦

最近、JScriptを使い始めました。(※ JScript .NET ではなく、WSH上の JScriptです)

といっても、WEB アプリケーションの開発を始めたわけではなく、パソコン上でのちょっとしたテキスト加工の助けになれば・・・というつもりで、もっぱらコマンドプロンプト上で試用しています。たとえば、

  1. WEBブラウザでページを開き、 [編集]-[すべて選択]・[編集]-[コピー]で、内容をクリップボードにコピー
  2. クリップボードから取得したテキストをJScript で加工し、クリップボードに戻す
  3. それを、テキストエディタやExcelなどのアプリケーションに貼り付ける

というようなことができれば便利かな・・・と思ったわけです。

しかしながら、いつも使っているC++と比べると全然勝手が違うので、難渋しています。特に

変数のタイプミスをしても、コンパイルエラーにならずに、プログラムが実行できてしまう(当然、誤動作する)

という特性にはずいぶん悩まされました。「動かしてみて間違った動作に気づくまで、タイプミスに気づかない」というのはあまり生産性がよくないですね。同じ用途のVBScriptには「宣言されていない変数を使うとエラーになる」という動作モードがあるようですが、JScriptには同様のものはないのでしょうか?
「だったらVBScriptを使えば?」とも考えましたが、どうしても、いつも使っているC++に近い文法のJScriptの方が書きやすそうに思えてしまいます。このため、VBScriptは敬遠してしまいます。「ソフト開発者たるものが、この程度の柔軟性がなくてどうするか」とも思うんですけどね。

実は、ちょっと昔に、同じ用途を目指して Perl(Active Perl)を試用したこともありました。それなりに使えそうではあったんですが、

  • (1)GUI上でステップ実行のできるデバッガが見当たらない
  • (2)ActivePerl のインストールは面倒なので、他人(プログラミングとは無縁な普通の人)にスクリプトを配布するのには向かない

といったところが不便に感じられました。JScriptは、WindowsXP以降には標準装備されているうえ、Visual Studio でデバッグができる点がありがたいです。

JScript・WSHで一番困るのは、入門者向けのドキュメントが乏しいことです。このため、分からないことにぶつかった時には問題解決に時間がかかっています。これでは、スクリプト言語の特性といわれる「習得が容易で、すばやく作れる」というメリットも台無しです。

実際のところ、JScript・WSHを使っている人は、プログラマの集まる開発現場でもほとんど見られません。利点も少なくないプログラミング環境なのですが、入門者向けのドキュメントが乏しく、周囲に聞ける人もいない現状では、「利点の有無を理解できる程度に使ってみよう」という気が起こりにくいのは当然でしょう。

2008年12月13日 (土)

FAQ: ダイヤグラムの駅間隔を、駅間距離で指定できるようにしてほしい

「ダイヤグラムの駅間隔を、駅間距離で指定できるようにしてほしい」

実はこれは、OuDiaユーザーの方から最も頻繁に寄せられる要望です。

しかし、本当に申し訳ありませんが、OuDiaとしては、この機能を設ける予定は今のところありません。
最大の理由は、OuDiaでは「ダイヤグラムの縦軸は距離ではなく、運転時間に従って決定される」という考え方に準じているためです。

2007年2月18日にこのブログで少し触れたことがありますが、実はOuDiaの最初の構想では、駅間距離をkm単位で入力できるようにするつもりでした。ダイヤグラム画面での縦軸の駅間の幅は、この駅間距離をもとに決定するつもりでいました。

しかし、『時刻表大研究(監修:鉄道友の会。廣済堂出版)』や『鉄道ジャーナル』の記事によれば、実物のダイヤグラムの縦軸は、その路線の代表列車の運転時分をもとに決めているのだそうです。理由は、多くの列車のスジをなるべく直線にするため、といったことだったと思います。
(※最近では、 Wikipediaの『ダイヤグラム』の項でも「できるだけスジが直線となるよう、駅は通常駅間の距離ではなく所要時間に基づいて配置される。」と記されています。) 

OuDiaではこの考え方に従い、「ダイヤグラムの縦軸は、最速の各駅停車の運転時間をもとに決定する」という仕様にしました。この決定に伴い、駅間距離の入力は意味をなさなくなったため、作成を取り止めてしまいました。

以上は、OuDia構想時の検討過程です。これ以後、OuDiaはこの仕様をずっと受け継いでいます。

とはいえ、この検討をした頃は、「OuDiaをとにかく早く形にする」ということを優先していたため、細かい事柄は後回しにしていました。しかし、OuDiaの初公開から3年以上が経ち、今ではOuDiaも一応、それなりの形にすることができました。要望の多い機能でもあるので、今一度、実現方法を検討してみようかな・・・という思いはあります。

しかし、僕自身が使うことを考えた場合、
 「全駅の駅間距離を入力するのは面倒そう」
 「駅間距離に準じたダイヤグラムは、ぱっと見た感じはリアルで印象はよいものの、実用性はそれほど変わらないのではないか?」
と思ってしまいます。自分があまり使いたいと思えない機能の開発は、どうしても優先順位が下がります。

以上が、「ダイヤグラムの駅間隔を、駅間距離で指定できるようにしてほしい」という要望に対する僕の現在の考え方です。要望を下さった皆様には申し訳ありませんが、なにとぞご理解ください。

 なお、OuDiaと同じジャンルのソフトであるCocoDia(Macintosh版  http://www.horazaka.net/ )には、距離に準じてダイヤグラムの縦軸を決定する機能があるようです。僕自身は Macintosh を利用できる環境にないため、残念ながら CocoDia を使ったことがないのですが、可能であればCocoDiaの利用を検討するのも一つの方法だと思います。

2008年12月10日 (水)

秋の終わり

先日『ダイヤグラムビューの列車線の複数個所に列車情報を表示』でお知らせしましたとおり、しばらくぶりでOuDiaの機能追加を再開しました。

11月は小さな旅を繰り返してました。それぞれに楽しかったですが、OuDiaは放置状態になってました。
でも、もう12月。秋の旅行シーズンも終わったんですね。0系新幹線電車の通常営業運転終了とともに・・・

冬は家にこもりがちになるため、自作ソフトの充実にはいい季節と言えるかもしれません。
でも、12月には、犬山にある名鉄のモノレール線の廃止が控えています。転勤がきっかけとはいえ、名鉄沿線民になったからには、一度は来訪せねば・・・と思っています。そんなわけで12月も、OuDiaの開発に週末の時間を集中、とはいかないようです。

2008年12月 9日 (火)

ダイヤグラムビューの列車線の複数個所に列車情報を表示

現在、OuDiaのダイヤグラムビューの列車線の複数個所に列車情報(列車番号・列車名・号数)を表示できるような機能を試行しています。

今までのOuDiaのダイヤグラムビュー は、1本の列車につき1箇所しか列車情報を表示できませんでした。しかし、列車情報表示が1箇所では、列車線に対応する列車情報を読み取るのが困難な場合があります。特に、長距離路線・追い抜きの多い路線・支線がある路線では、終点に近づくにつれて、列車線と列車情報の対応が読み取りにくくなっていました。

今回の試行は、この問題の解決を目指したものです。
今の計画では、駅のプロパティに『ダイヤグラムで列車情報を表示』 {ON,OFF} の項目を追加する予定です。これに伴い、[路線ファイルのプロパティ] . [ダイヤグラム画面] の [列車情報表示位置] の項目は廃止を予定しています。

 

« 2008年11月 | トップページ | 2009年1月 »