月額480円〜の高速レンタルサーバー ColorfulBox

Visual Studio 2005 移行時の注意

仕事で使ったほうがよいのかどうか判定するため、Hamanaの環境をVS2003からVS2005に移してみた。
コンパイルはほとんど一発で通ったが、ものすごい数の警告がでる。原因は strcpy() などのセキュアでない古い関数を使っているためで、親切に 「strcpy_s()使ったほうがいいじゃない?」と警告をだしてくれるからであった。
もちろん pragmaで表示しないようにもできるが、これには素直に従ったほうが良さそうなので、大部分はセキュアなバージョンに置き換えた。

で、VS2005移行時に一番危険だと思ったのは以下のコードがコンパイルはできるが、実行するとファイルのオープンに失敗してしまい、正しく動かなくなることだ。
int main() {
  std::ofstream ofs("日本語.txt", ios_base::out | ios_base::trunc);
  if (ofs.is_open()) {
    ofs << "OK";
  }
  return 0;
}
日本語のファイル名を ofstream::open()関数に渡すとアウトらしい。英語のファイル名だと問題ないのでかなり危険だ。
デバッガで追ってみると open()関数内部で マルチバイト文字列からワイド文字列への変換を行っているのだが、そこが正しく変換してくれないことが原因だった。
どうやら ofstream::open()関数の実装が変わり、VS2003ではマルチバイト文字列のまま扱っていたのが、VS2005ではワイド文字に変換してから扱うようになったため、変換がうまく動くようにロケールを設定してあげないといけないようだ。

てことで、open()を呼び出す前に setlocale(LC_ALL, "Japanese"); を呼び出してロケールを日本語に設定することでうまく動作するようになった。多言語対応のアプリケーションの場合は以下のようにシステム標準のロケールを設定するといいと思われる。
int main() {
  setlocale(LC_ALL, "");
  std::ofstream ofs("日本語.txt", ios_base::out | ios_base::trunc);
  if (ofs.is_open()) {
    ofs << "OK";
  }
  return 0;
}

もう1点動かしてみて初めて発覚した問題は time_t のサイズが32bit → 64bitに増えていることだ。 susieプラグインのインターフェースに time_t型の変数を含む構造体があるのだが、見事にここでコケていた。
time_t型をシリアライズしたり、他DLLに渡している場合は注意が必要だ。

GPU-based Trimmed NURBS Tessellator

NURBSのテセレータを書く必要が生じて、ちまちまとドロネー分割あたりから書き始めている。
んで、いろいろ論文探していたんだが、面白いのを発見した。

GPU-based trimming and tessellation of NURBS and T-Spline surfaces
GPUのパワーによって、リアルタイムにNURBS曲面をテセレートして描画しようという話。
基本的な考え方は、トリムによって切り落とされる部分のα値が0になっているテクスチャ(トリムテクスチャ)を母曲面に貼り付けて描画すればOKじゃんというもの。
トリムテクスチャの生成や、母曲面の評価もシェーダを使って極力ハードウェアの支援を受ける。
またトリムテクスチャのサイズや母曲面のサンプリング数は、描画時のサイズに応じて動的に変更していくので、シームレスな拡大縮小が可能となる。

用途は描画に限定されるだろうけど、CADからいわゆるRegen機能が不必要になるのは便利そう。
現在のシェーダの機能上の制約が大いために、実装はかなり泥臭いことをやっているようだけど、この辺もDirectX10の ジオメトリシェーダを使えばスマートに実装できそうだなあ。
Windows Vistaが楽しみだ。

ポップアップ!?

今日は夢の中で、今作ってるプログラムのバグの原因が突然浮かんだ。すぐに布団からでてPCに向かって確認したら確かにそれが原因だった。
プログラマの究極奥義、ポップアップをマスターする日も近いかもしれないな。

ポルトガル語版 hamana リリース

hamana_portuguese.jpg

ブラジルの人からポルトガルリソース作成のオファーが来たのでありがたく作成してもらった。アシュケー、アシュケーである。

これでサポートしてる言語は、日本語、英語、中国語(簡体字)、中国語(繁体字)、ポルトガル語で計5つ。
個人的にはアラビア語版をぜひ作りたい。

それにしてもさすがにリリース時の手間が半端じゃなくなってきた。もし続けるなら本気でオープンソース化とかを考えないといけないかもしれんな。

レストランデータベースソフト 作ってみました

今年のGWは長期旅行に行かず、暇な日は家にこもって Google App Engine(GAE)をいじってたのですが、習作としてレストランのメモをするwebアプリを作ってみました。
「この時間やってて美味しい店あったかな?」と思ったときに、いろいろお店があるはずなのに、なかなか思い出せないときありますよね?
そのときにさっとお店リストを作るためのソフトです。(といっても、まだデータベースにロクにお店が入ってないので、じゃんじゃん登録していかないと意味ありませんが。)

CodePasture - レストランメモapp

携帯電話から利用するのが目的だったので、見てくれはいまいちですが、よかったらみなさん使ってみてください。
検索フィルタで調べたい曜日を設定すると、その曜日にやっているお店をリストアップします。

閲覧、検索だけなら誰でも使えます。
編集や評価、コメントを投稿するには googleのアカウント作成が必要です(無料)。また、他人の作成した項目は編集できません。(お店の評価点をつけることはできます。)


それにしてもgoogle app engineはまだ不安定ですね。インデックスの生成まわりでよくサーバがトラぶって、管理者に連絡しないとどうにもならない状況に二度ほどなりました。GW明けにはソフトは大体出来ていたのですが、このトラブルのせいで一ヶ月開発がストップしてしまった・・・
でも、CGIとかpythonだとか仕事とは全く違う世界のプログラミングは楽しくていいですね。

スクリーンショット:
cp-rest-snap2.JPG
cp-rest-snap1.JPG

<< 2/2