関東在住の友人から夜間電話があり、彼がホームページを作りかけていて、萌えるカウンターなるものの設置を試みていることがわかった。

自宅にサーバーを立てているそうで、そのサーバーを用いて、ホームページにカウンターを設置しようとしているそうで、動作確認でお手伝いしたが、カウンタ値が更新されない。プログラマー畑というよりサーバー系の人なので、今回 CGI を動作させる部分でうまくいかないようだった。

彼が、明日の仕事にそなえて就寝した頃にふと、この blog に設置してみようかと思い立ってとりつけてみた。

画像には、日下こかげさんの「OSたんカウンタ」をkurageさんが縁取り、透過処理されたものを使わせて頂いた。

カウンターのコードは実は、 rinn さんの rnote 用サンプルプラグインそのままだ。文字列を出力している箇所をちょっと変えただけだ。(笑)

ひさしぶりにプログラミング(というほどのもんじゃないが…)をしてみて、書き方を忘れかけていたことと、rnote のカスタマイズのしやすさを感じた。思った処理が実現しやすい。C でも PASCAL でも、 Algol 系の言語経験が少しあれば、RAD 的はやさでサイトを構築できるんではないだろうか? MOVABLETYPE などの大がかりな blog ツールでこんな軽快さが得られるかどうか…。素晴らしいツールだ。

ちなみに、深い意味なく設置してしまった画像カウンターだが、このような画像になじめば自分も「萌え」というものが理解できるようになってくるのだろうか…。

なんとなくだが、なにかが音を立てて崩れていった気がするのは気のせいだろうか。

[コメントの受付は終了しています ]
1: 冬星 (04/04 12:53)
moonfishさんの「ねこみみカウンター改」の画像も出てくるようにしてみました。クライアント側にスクリプトを用意していないのでとりあえず出るだけです。ランダムに画像が選ばれるので何度か更新すると出てくるでしょう。

XM6のソース公開 2005-01-25 (火) 01:23:29+09:00

ソフトウェア

PI.さんのところで、XM6のソースが公開されたので、これはありがたい、ぜひ参考にとビルドしてみた。

ドキュメントによると「コンパイラとして、Microsoft Visual C++ .NET 2003が必要、アセンブラとして、NASM(Netwide Assembler)が必要」とあるが、VC6しかもっていないので少し作業が必要だった。以下メモ。

---
#2005-1-29加筆修正。

[VC]
・「WIN32アプリケーション」を選んで空のプロジェクトを作り、ファイルを追加。
・プロジェクトの設定を開いて、一般タブの"Microsoft Foundaiton Class"のところを、"共有DLLでMFCを使用"にする。(初期値では"MFCを使用しない"になっている。)
・プロジェクトの設定を開いて、"プリプロセッサの定義"に、"_WIN32"を追加する:VC6で自動追加される定義は、"WIN32,_WINDOWS,_MBCS,_AFXDLL"(共通)、"NDEBUG"(リリース版)、"_DEBUG"(デバッグ版)。
・プロジェクトの設定を開いて、XM6.vcprojの中身を参考に、リンクするlib に"imm32.lib winmm.lib version.lib dinput.lib dsound.lib dxguid.lib obj/core_asm.obj obj/mfc_asm.obj obj/rend_asm.obj obj/star.obj"を追加。
・VCメニューの、"ツール/オプション/ディレクトリ/インクルード"のところで、"C:/DXSDK/INCLUDE"など環境に応じてDirectXのインクルードファイルの場所を追加。
・mfc_tkey.cpppのテーブルCTKey::KeyTable[KeyMax]で"VK_OEM_ほにゃらら~"などが未定義といわれるので、VCメニューの、"ツール/オプション/ディレクトリ/インクルード"で、新しげなプラットフォームSDKのインクルードディレクトリ"C:PROGRAM FILES/MICROSOFT PLATFORM SDK FOR WINDOWS XP SP2/Include"をVCのINCLUDEより上に追加:VC6のwinuer.hで"VK_OEM_"ではじまる定義は"VK_OEM_CLEAR"1つしかないので他は全て未定義エラーが出る。SDKのwinuser.hで追加されたもののようだ。
・fdd.cppの、クラスメソッドFDD::WriteP(),FDD::GetName(),FDD::GetPath()は、戻り値をもたない(void)のに戻り値を返すよう記述されておりエラーになる。return foo(); -> foo(); のように処理だけ行って値は捨てるように変更。
・mfc_sub.cppで、クラスメソッドCSubWnd::OnActivate()が、同様に戻り値をもたないはずなので、ベースクラスCWnd::OnActivate()の呼び出し結果を return しているのを、ベースクラスを呼び出すだけに変更。
・filepath.cppの、::GetFileTime()の第一引数を(LPVOID)にキャスト。
・memory.cppの、Memory::ReadOnly()のif文の式、"if (mem.table[index] != this)"がエラー(C2446)になるので、"((Memory*)mem.table[index] != this)"と明示してやる。
・mfc.hの、先頭で WINVER を #define している直後で、_WIN32_WINNT を(WINVER) と同じ値に定義。

[NASM]
・ドキュメントによると、nasmの版は0.98推奨とあるが、本家サイトでは入手不可能。本家では 0.98bf-win32(一番古い)~0.98.39(最新)までが入手可能。
yosirin-hello さんのサイトで、「うるり」さんがオリジナルの0.98に対してSSE2対応の改良をおこなった版も紹介されており、入手可能。
・しかし、いずれの版でも、star.cから生成したstar.asmでエラーが出る。
・うるりさんの版を用いた場合、107行目がエラーになりnasmが通らない。"TEST [__BUSERR_STAT],00008000h" と出力されているところがそうで、オペレーションサイズを指定してやる必要があるので、"TEST long[__BUSERR_STAT],00008000h" と修正してnasmを通すことでオブジェクトが無事に出来る。

以上の修正で、動作を確認。今のところ色々触ってみているが問題はない。

[コメントの受付は終了しています ]
1: PI. (01/28 19:35)
詳しい情報ありがとうございます。参考にさせて頂きます。

読んでいて少しわからないのが
・_WIN32を追加(自動で追加されるのでは?)
・VK_OEM_ほにゃらら~などが未定義(具体的には?)
・mfc.hに、#includeを追加 (何をincludeしてたらよくなったのか?)
あたりです。このあたりを解説いただければ助かります。

それとNASMのアセンブルですが、手元の0.98でもアセンブルできませんでした(笑)
Star.cが古かったようです。次回のバージョンでは差し替えておきます。
2: 冬星 (01/29 16:36)
ソース公開ありがとうございます。参考になります。CPU内部の動作から表現されているのに関心しました。ハードウェアの知識が生半可じゃあ作れないですね…。

ご質問の件(+memory.cppの件など漏れ)上に加筆しました。mfc.hのinclude云々はゴミ消し忘れです。
この記事のリンク元 | 7 | 1 |

今回変更点多いですね。(おつかれさまです…。)ソースも大分変っていて、目が回りました。(@o@)

管理者用の画面に「rNoteの動作設定」がついて、If-Modified-Sinceに応答するか、ページキャッシュを生成するか、キャッシュするページ数など設定ができるようになってなんだかかっこいいです。

今回の目玉は、高速化と携帯電話対応のようです。ページの内容をキャッシュするようになったので、動的生成の負荷が減るのが期待できそうです。あと命令の追加などいっぱいあるのでまた落ち着いて見てみようと思います。(^^

今後の実装予定も、たくさんありますね。こりゃ大変そう…。XML-RPC、BBSへのファイルアップロード機能とお絵かき掲示板機能、認証画面あたり、次回以降に実装されるのがはやくも待ち遠しいです。

[コメントの受付は終了しています ]
この記事のリンク元 | 1 |

前々から切望しつつ実現していないことがある。

3D化されたノベルゲームシステムだ。

秀逸なシステムとして現在はこれらのツールをチェックしている:
吉里吉里
LiveMaker
DNML
NScripter
Yuuki! Novel
YU-RIS

これら今のノベルゲームのシステムは大抵、「レイヤ」という機構をもつ。背景の上に登場人物などの前景を重ね表示するという仕組みであり、アニメのセル重ね合わせの原理なわけだ。フォトショップでも採用されている。凝ったシステムでは、レイヤごとの拡大縮小回転平行移動、乗算加算減算など各種演算重ね合わせなど、いろいろな処理ができたりする。

それは良いのだが、どれも二次元の実装なのだ。それが不満なのだ。

3D化すれば、各レイヤを面ポリゴンとして扱うことで、拡大縮小回転など、たわいもない。いや、3次元空間で表現できるので、遥かに見栄えがする処理が出来る。画質は別として、大雑把に言えばプレミアで作られた動画みたいなものがリアルタイムに各シーンで表現できるようになるわけだ。光源も設定できるし、フォグや遠近法、パーティクル、ブラーなどなど、映像表現としては遥かに良くなる。技術的処理速度的には、既に十分可能になっている。

しかし、3D化されたノベル制作システムが出るのを何年も待っているが、まだ噂を聞かない。

PSG System Laboratoryというところの、月姫打ONLINEという作品に使われたシステムが唯一自分の知っている例外で、3D化されたシステムをもっているようだ。そんなに大げさな表現は使っておらずむしろクールに抑えた表現がかっこよかったが、残念ながら活動をやめてしまったようだ。Age社のシステムでは、雨、雪に関して3D化が確認できる。不十分ではあるが効果的な演出がなされている。

そうこうするうちに、次期WINDOWS(Longhornという名前をもっている)のGUIが3D化されているのを知って感慨深かった。

ノベルゲームシステムを注目してきた視線からすると、アプリケーションの新しい特徴を後でOSが取り入れるという通例が逆転しており、WINDOWS自体が3D化してもアプリケーション側が旧態依然のままというのが滑稽にうつる。もちろん実際はそうではなく、3D映像制作ツールは昔からたくさんでており、OSが後から取り入れられそうなところを取り入れたのは今回も同じなのだが。

一方で、ノベル作品の映像表現自体は、派手になってきている傾向がある。人物を頻繁に動かしたり3D遠近法を取り入れ遠近感を出す作品もある。Fateのように、各種演算を使った重ね合わせを活用して光の表現を追求した作品も出ている。従前の手書き背景に対して、レンダリングされたメカや都市、大地や樹木などの背景利用もかなり浸透してきている。

こういった表現傾向にとって、システムの3D化は飛躍的表現力の向上をもたらすに違いない。雨、雪や蛍を飛ばすにしても、手書きの丸をサインカーブでくねくねさせるものばかりだが、パーティクルを使い3D空間内で飛ばすだけで美しい空間表現が可能であり、現在の2D表現のものとは比較にならない。

本格的に3D化されたノベルシステムの出現を期待する。

[コメントの受付は終了しています ]
1: 冬星 (09/08 11:04)
今のシステムは基本的にPC98時代の『雫』や『痕』の頃から変わっていないんですよね。
当時は技術を注いだものだったわけです。
今では逆転してこの分野は技術的に保守的すぎます。むしろ8bit16bitの頃の方が必死で技術を使おうとしていた。
確かに脚本が素晴らしければ表現が稚拙でもすごい作品になってしまうんですが、だから「これで十分」は言い訳に聞こえます。
飽きもきていると思う。

自サイトを開くとき:
http://ichounoki.info/rnote/
だと「counter:0000921」。

ずっと変わらないなぁと思っていたら:
http://ichounoki.info/rnote/rnote.php
でだと「counter:0001087」になっていて、びっくりした。

どうもカウンタを実装してから、こういう状態が出ていた気がする。
rNote本体を読むにはPG技能のリハビリがかなり必要な状態なので憶測だが:
(1)Last-Modified, If-Modified-Since との兼ね合い。
(2)プラグインとの兼ね合い。
 →カウンタプラグインは以前と異なった文字列を生成して出力するのだが、
  本体側が、プラグイン側で更新があったことを受け取れていないため、
  更新があったときの(1)の処理をしていない。
(3)サーバーまわりの設定の影響。
このあたりが関係しそうな気がする。

[コメントの受付は終了しています ]
1: 通りすがり (08/30 11:04)
上のケースで、キャッシュの再構築をするとカウンタ値が1087になった。
どうも(2)関係ぽい。プラグインが更新したのに本体が関知していなかったりしないかな(^^;
2: 冬星 (09/01 01:20)
逆のケースもあるみたいだなぁ…。
キャッシュ更新直後にhttp://ichounoki.info/rnote/がcounter:0001154になるのに、http://ichounoki.info/rnote/rnote.phpだとcounter:0001153。
3: りん (09/01 09:52)
現在の真のカウンタ数を見たい場合はスーパーリロードしてください。
まぁ、あのカウンタプラグインは、プラグインの作り方のサンプルみたいなものなので。
キャッシュコントロールは、rNote本体だけではなく、サーバーの設定でも変わる(例えばCGI版phpは勝手に自動でIf-Modified-Since応答が行われる)ので、常に最新のカウンタ数を表示したい場合は画像生成方式でないと。
4: 冬星 (09/01 19:09)
「うっ、スーパーリロード??」と検索しました。こんな機能が…。知らずに生きておりました。
サーバーの設定も影響するんですか…画像参照なら参照先画像は揮発的と解釈される??んでしょうか。試してみます。
ぷにゅさんみたいに文字列のメッセージをころころ変えるのは大変そうですね。(;;
5: りん (09/02 15:06)
ぷにゅさん所はどうもIf-Modified-Since応答を殺してるっぽいです。
まぁ、ほとんどのBBSやBlogはキャッシュoffが普通ですしー
6: 冬星 (09/04 00:53)
あー、なるほどblogやbbsはキャッシュ設定offですか。
それでやるか、画像でだすか、2手ありそうですね。ありがとうございます~
この記事のリンク元 | 1 |