今度ドラマに出演します!

といっても、オレじゃなくて、拙作 hamanaですが、小道具(?)として登場する予定です。
でも、関西ローカルの深夜ドラマらしいので見れない...(´;ω;`)ウッ…

いやーでもこういう需要は確実にあるんだねえ。操作のストレスにならない程度に凝った画面エフェクトというのはやはり重要だと思うわけです。

ちなみにこないだの祝日に Windows Vista の Ultimateをインストールしてみました。
期待していたAeroグラスを使ったエフェクトは、予想以上に地味でした。あえてそうしたんだろうけど、MacのOSXでやってるぐらいのギミックは用意しておいてほしかったなあ...
画像のスライドショーはDirect3D使いまくりで面白い。でもPS3のビューアのエフェクトに受けたような衝撃はなかった。
あと、フォントのレンダリング品質はいまいちで、 GDI++がVistaでも引き続き大活躍する予感・・・っ!!!

キムタク弁天島マンション購入説が信憑性をおびてきたわけだが

24 TwentyFour


        ∧ ∧
       (*‘ω‘ *)
        (∩∩)

   \ ピコッドン ピコッドン  /
  / ̄ ̄ /|| 
  r== r .|_
/`L_`L//|
l ̄ ̄ ̄ ̄ i

        ∧ ∧
       (*‘ω‘ *) ドキドキ
        ((∩∩))

  / ̄ ̄ /|| 
  r== r .|_
/`L_`L//|
l ̄ ̄ ̄ ̄ i

        ∧ ∧               /| ̄ ̄ |
       ( *‘ω‘)          ガチャッ   || (><;)
        (   )                  ||o⊂ U)|
         v v                   ||  U U .|
          川 バインバイン          ||/ ̄ ̄
         ( (  ) )
  
  / ̄ ̄ /||
  r== r .|_
/`L_`L//|
l ̄ ̄ ̄ ̄ i  
近所にゲオができたので、最近はDVDをよくレンタルしている。 で、 24 TwentyFour のシーズン1をいまさら借りて見ているわけだが、めちゃくちゃ面白いね、コレ。
今は第7話まで見たところだが、先の展開が楽しみで楽しみで他の作業に身がはいらない。恐るべし。
シーズン2以降もこのクオリティならすごいな...

FSAA on CAD

自家製CADフレームワークにFSAAを使えるようにしてみた。
特にアプリケーション側で対応させるコードをかかなくてもGeForceなりRadeonのドライバの設定をいじれば強制的にFSAAをかけることが可能だが、やっぱりアプリ側で制御すればエンドユーザーでも享受しやすいもんね。

FSAA なし
FSAA none

FSAA 4点サンプリング
FSAA 4X

FSAA 16点サンプリング
FSAA 16X

やっぱり綺麗だなー。16点になれると元には戻れないかんじ。

以下は実装にあたってはまった点。
  • FSAA用のフレームバッファ作成のためにwglChoosePixelFormatARB()拡張関数が必要なのだが、この拡張関数のアドレスを取得するにはOpenGLのレンダリングコンテキストが有効でなくてはならない。したがって、フレームバッファ作成のために、ダミーのフレームバッファを作成する必要がある
  • さらにそのダミーのフレームバッファを本当に作成しようとするウインドウ上に作成してしまうと、本当のフレームバッファを作成するときに失敗してしまう。したがってダミーのウインドウを作成して、ダミーのフレームバッファをその上に構築しなければならない

OpenGLの拡張関数を使うのは本当にめんどいな。資料もあまりないし。

sb の entry.php の復元

sbというblogシステムを使っているが、たまーにentry.phpという記事一覧を保持するデータファイルらしきものが壊れることがある。
古いバージョンのまま使ってるのが原因のような気がするが、今はアップデートする気力がないので、今回も自分でentry.phpを復元することにした。
もしかしたら同じ現象の人もいるかもしれないので、C++での復元プログラムをさらしてみる。sbのファイルフォーマットは自分で適当に想像したものなので、間違ってたらすみません。
ちなみにboostのfilesystemをはじめて使ってみたが、いいね。Unicodeに対応してない&将来にわたって対応の予定がないってところが痛いけど。
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/convenience.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/algorithm/string.hpp>
#include <map>

using namespace std;
using namespace boost;

int _tmain(int argc, _TCHAR* argv[])
{
    if (argc != 3) {
        cout << "usage: sb_entry_repair src_sb_entries_path dst_sb_entry_file_path\n";
        return -1;
    }

    namespace fs = boost::filesystem;
    fs::path entries_path = fs::path(argv[1], fs::native);

    const string sHeader("ent\t");  // entry header
    map<int, string> entry_map;
    fs::directory_iterator it_end;
    for (fs::directory_iterator it(entries_path); it != it_end; ++it) {
        if (".php" != to_lower_copy(fs::extension(it->leaf()))) {
            continue;
        }
        fs::ifstream ifs(*it, ios::binary);
        if (!ifs.is_open()) {
            continue;
        }

        string sLine;
        getline(ifs, sLine);
        if (sLine.compare(0, sHeader.size(), sHeader) != 0) {
            continue;
        }
        sLine.erase(0, sHeader.size());

        iterator_range<string::iterator> itrFind = find_nth(sLine, "<>", 9);
        if (!itrFind.empty()) {
            int iEntryNum = atoi(sLine.substr(0, sLine.find_first_of('<')).c_str());
            entry_map[iEntryNum] = copy_range<string>(make_iterator_range(sLine.begin(), itrFind.end()));
        }
    }

    ofstream ofs(argv[2], ios::binary);
    if (ofs.is_open() && !entry_map.empty()) {
        ofs << entry_map.rbegin()->first + 1 << endl;
        for (map<int, string>::const_iterator it = entry_map.begin(); it != entry_map.end(); ++it) {
            ofs << it->second << endl;
        }
    }

    return 0;
}

<< 7/25 >>