2017年12月
          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
31            

最近のトラックバック

無料ブログはココログ

« 2008年12月23日 | トップページ | 2009年1月4日 »

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日 | トップページ | 2009年1月4日 »