How to Programmatically Create Self-signed Certificate and Key Pair Association for SSL Communication with Microsoft Windows SSPI

In late 2001 when I started the development of the DICE, a multi-protocol network server, one of the planned features was secure authenticated connection across the web for remote server administration. I implemented it with SSPI (Security Support Provider Interface Architecture) found in Microsoft Platform SDK. SSPI is an abstraction framework through which you can control 3 (or more) different secure authentication/communication protocols including SSL (Secure Sockets Layer).

Among the protocols supported in SSPI, I chose SSL because others (NTLM and Kerberos) were useless in my context over the internet without ActiveDirectory and related mess. But SSL in SSPI has some caveats before use – Since SSL is an inefficient streamed protocol unlike others and the abstraction by SSPI is not in high-level, your code starts to look nasty if you attempt to make it conform to the streaming nature of the protocol. It gets worse especially when your application is constructed around asynchronous sockets. Besides, you need a server certificate prior to negotiation.
read more »

DICE version 0.84 配布

昨年末にPrince of Percia: SOTをやって以来、全くPCゲームをプレイする気が失せていたのは前回書いたとおりである。 Painkillerも昔の面クリア型ゲームを中途半端に模したような感じでかなり興醒めというか期待外れだった。ところが、 ビデオカードのアップグレード予定も当分ないので今年はこのまま何もやらずに済まそうかなどと思っていたところ、あっさりと その方針を覆らせるゲームに当たってしまった。何のことはない、Unreal Tournament 2004である。デモ版をダウンロードして遊んでみたところ、ネットワーク対戦のOn-slaughtが実に面白い。デモ版でこれだけ遊べていいのだろうかという出来の良さに率直に驚いてしまった。

前作では、前々作からのグラフィックスの進歩にばかり目を取られ、時間もないということでUTで定評のあるボットの能力を信用してシングルプレイのラダーを クリアしあっさり通り過ぎていたのが、今作のONSで遅ればせながらやっとネットワーク対戦FPSの真価に触れたような気がする。グラフィックス上は前作からほとんど進歩しておらず、またキャラクターもほとんど使い回しという状態ではあっても、乗り物 が正式サポートされたことで遊びの幅が立体的に広がった。最近では乗り物が登場するFPSは珍しくないとはいえ、Unrealの世界の武器の扱いに慣れすぎているせいか、Halo等では味わえない絶妙のバランスを感じる。それも、Haloほどにはかっちりと した作りでもなく、Unrealという名の文字通り非現実的にキャラクターがぴょんぴょん跳び回りつつ激しく接近戦を行うというのがUnreal Tournamentの真骨頂だ。20分程度で済むONSは実にリプレイバリューが高く、たとえ負けても激しい抗戦ができればそれなりに満足感がある。その場限りの人間のチームは、上級者と下級者が混ざっているのでよりメリハリのあるプレイを楽しめる。ONS(とASの一部)では乗り物もあるので、1on1だとさかんにサイドステップで飛び回る上級プレイヤーを叩ける逆転のチャンスも増え、集団ゲームとして実に合理的なハンディキャップ配置である。PCのいわゆる洋ゲーしかやらず、UTではなくUnreal本編のようなシングルプレイヤー物を好み、一回最後までやったゲームは大概そのまま手放してしまう私のような人間にとって、この中毒性の陶酔は久々の感覚である。下手をすると一年間UT2004だけでゲームの欲求をまかなえそうな気すらしている。良作の太鼓判を押したい。
read more »

DICE version 0.83 配布

2003年の年頭には下記のように6回はこのページを更新するなどとうそぶいてみたものの蓋を開けてみると4回しか更新していなかったりする。しかも、すぐ下ではプログラミングに邁進するかのようなことが書かれているが目下全く手が進んでいないのでこのサイト的には情けない限りである。年末に当年の総括をするのが一般的なようだが、12月も1年のうちには違いないので、自己の1年を顧みての反省は1月にするのが適当である。

反省と言えば、犬も歩けば blogにあたるというほどbloggingがWebで流行っている昨今、独り書きあるいは自省という行為が広まったようにも見える。しかし、実際の所blogというものは暗黙に、あるいは明示的に、対話や双方向の関連づけを前提として作られており、主に自省のためというより、他者が常に意識されている活動である。Webで公開されている以上当然ではないかという意見もあろうが、blog以前に昔の日本のWebで行われていたWeb日記というジャンルは、多 くの場合匿名で行われていたので、個人が他者とのコミュニケーションのフィードバックを求めるという側面を必ずしも持っていなかった。いわば、一方的な告白である。当時はWeb日記などには全然関心が無かったが、昨今blogに当たらずに過ごす方が無理なので毎日毎日よく時間を費やして書けるもんだと私などは感心して色々見て回っている。

Webデザインについても、blogの場合なぜか例外なく「シンプルで趣味のいいデザイン」を目指したと思しき様式に統一されているのも面白い。写真もそんなシンプルなフレームの間に挟まれていると実に映える。私は去年初めにMozilla Firebirdを使い始めるまでNN4に固執していた関係でスタイルシートやJavaScriptに関心を持つのが後れた ので未だにその辺りについて何か学習するたびに面白みを覚えてしまう。DICEのWebインタフェイスを作るときにMozilla/IEのDOM操作で面白いことが色々出来るのにも開眼した。しかしこれがFlashまで行くと奥ゆかしさを失うような気がするのは何故だろう。あくまでWebブラウザonly で出来るのが好ましいと感じる。
read more »

Template Metaprogramming For Dummies

テンプレートメタプログラミングと呼ばれるテクニックがC++のコードに意識的に用いられ始めたのは1995年頃にまで遡るらしい(C++ による科学計算のためのライブラリBlitz++を作ったT. Veldhuizenの記事)。Alexander StepanovがテンプレートをANSI/ISOのC++委員会に提案したのがそれを遡ること2年前、1993年である。科学計算の分野で最も高速に動作するプログラムを構成するにはC言語ではなくFortranが最適であるという周知の事実に対し、C++言語でテンプレートを積極的に用いて、Fortranによる場合と同水準のパフォーマンスと、より見通しの利くオブジェクト指向を採用したプログラム構造とを両立させようという試みのもとに、このテクニックは開発されてきた。広く一般の認知を受けたのは、2001年のAndrei Alexandrescuによる著作Modern C++ Designによってである。以来、Modern C++ Designで解説されたジェネリックプログラミングとテンプレートメタプログラミングのテクニックを収めたライブラリLokiBoostライブラリに収められているテンプレートメタプログラミングのためのフレームワークMPLを通じて、その利用は徐々に広がりつつある。
read more »

IN SOVIET RUSSIA DICE VERSION 0.8 RELEASES YOU!

やれやれやっとDICE 0.8の配布にこぎ着けることが出来て感慨深い。というくらいリリースが難航して結果約2か月も予定より遅れることになってしまった。その代わりと言っては何だが新しくWebサーバ機能も入り、かつ安定性も大幅に向上している(特にWindows XP/Windows Server 2003上)。「IRC/HTTP/opennapハイブリッドサーバ for MS Windows 2000/XP/2003」なんていかにも危なっかしい形容なのでIISのように簡潔な名称にしたいところではある。そこで私自身忘れていたのは、実はDICEという名前がその役目を果たすべきものであるにもかかわらず、未だに何故DICEという名前なのかどこにも由来を書いていないということである。今回も書かないのだけれども代わりにDICEに関する今後の方向性を示唆する物としてIFIRCでのインタビューを参照されたい(これも微妙に古くなってしまったが)。
read more »

DICE version 0.6 配布

Devastationやってみた。一応最後まで行ったけれどもとんでもない駄作だった。Unreal Tournamentのエンジンを使ってるのはいいとして、画面の雰囲気が何となくHalf Lifeを思わせる荒さで汚く、ボットの動作もぎこちない。シナリオは無理矢理UTのTeam Matchをやらせるためにでっちあげた(特にReGen、これこそご都合主義の権化である)と言っても過言ではない代物だ。「HOTEL れしゃお貴族」のような壊れた日本語ネタには尽きないゲームではあるが本当にそれだけだった。おまけに久しくFPSで酔ったことはなかったのに(移動しな がらcrosshairsを標的あるいは消失点に固定し続けることが出来るようになればFPSでは酔わない)、何故かこのゲームに限って酔ったので最悪で ある。文字通り「むかつく」ゲーム体験となってしまった。今年はもうしばらくゲームをやらないと思う。

ところで、DICEバージョン0.22 – 0.5にはアセンブリによる中途半端な最適化によりPentium3で動作がおかしくなるバグがあったので、そのバージョンで正常に動作しなかった場合は今回の0.6を試して頂きたい。

DICE version 0.22 配布

DICEバージョン0.22配布開始。メンテナンスリリースで特筆すべきことは何もない。尚、DICE上での利用に問題があるIRCクライアント用スクリプトがある場合、ここにDICEから削除されているIRCコマンドのリストがあるので自力でスクリプトの方を修正して頂きたい。それらのコマンドは、主にセキュリティ上の理由からDICEでは意図的に省かれているものである。

さてUnreal IIである。3日かかってクリアできた。解像度は1280 * 1024 * 32bitを使用した。最初は1024 * 768に設定したが明らかに汚かったので既にこの解像度はゲーム向きではないらしい。GF4Ti以上のVGA + 2Ghz以上のCPUで満足にプレイできると思われる。(Doom IIIだとこれでは足らないらしいが)
read more »

DICE version 0.212 配布

あけましておめでとうございます。

去年末からC#で.NETフレームワーク用のプログラムを書いている。開発環境のサポートが充実している点を割り引いても、まるでかつてPerlでスクリプトを書いたときに味わったような爽快感を再び味わうことができた。

年末の総括を忘れていたので今数えてみたところ2002年は8回このページを更新できたのでなかなか悪くない結果である。今年は6回と予想しておく。

一昨日DICE v. 0.21を公開したが問題が発覚したので0.211に差し替え。

さらに昨日公開したDICE v. 0.211にも微妙な問題が発覚したので0.212に差し替え。

DICE version 0.201 配布

DICE version 0.2 に凡ミスが見つかったので急いで修正&差し替え。結果的に別の部分まで手を入れることになったので慌ただしくリビジョンを上げた。あまり何回も見得を切るのは格好悪いので願わくばこれ以上問題が起こりませんように。

DICE version 0.2 配布 & KLassphere Athens 配布

DICE version 0.2の配布を開始した。SQL Server/MSDEが要らなくなり、より一般的なユーザに身近になったと思われる。SQL ServerのデータベースからDICE ver 0.2用のデータファイルを抽出するツールも置いたので移行も簡単である。来年はDICEに手を入れる機会はほとんどないのでこれを完成版と呼んでも差し支えない。ナンバリングこそ0.2ではあるがユーザインターフェイスの不親切ささえ脇に置けばサーバアプリケーションとしての内容は1.0と呼んでも良いものに仕上がったと自負している。SQL Serverのおかげでインストールに二の足を踏んでいた方は0.2の完成度を是非動かして試して頂きたい。ついでにISAPIの掲示板ももう手を入れる余裕がないので、なし崩し的に配布することにした。
read more »

Windows C++ マルチスレッドアプリケーション デバッグ法

1. はじめに
2. Windowsのマルチスレッド設備
3. 同期オブジェクトの保護対象
4. マルチスレッドの病理
5. マルチスレッドデバッギング – 実行時テストによる
6. マルチスレッドデバッギング – クラッシュダンプの分析
7. 広義のカーネルオブジェクトとしてのCRITICAL_SECTION
8 . おわりに

はじめに

Intel Corp.によるHyper-Threading Technology導入により、マルチスレッドアプリケーションがMicrosoft Windows®上で効力を発揮する機会がさらに増えることが予想される。Windowsにおける従来のメインストリームとしての、デスクトップでの個人利用を前提としたGUIアプリケーションでは、マルチスレッドといってもせいぜいワーカスレッドを作業の度に生成してシングルユーザに対するユーザイン ターフェイスの応答性を担保するといったきわめて局所的な利用に留まる場合が多かった。こうした、共有メモリの中での割り込みを主目的とするような限定的で単純な利用では、マルチスレッド固有の問題が生起する確率は当然低い。
read more »

DICE version 0.1 SR1 配布

DICEについて、前回言及した更新版とは別にいくつかの機能を付け加えるとともに、既存部分の振る舞いを変更したくなったのでサービスリリースとして更新が必要なファイルのみアップロードした。先に0.1をインストールして、そこへ上書きということになる。修正は含んでいないので既に稼働中のサーバがある場合はどうしてもSR1の機能を使用したいということでなければ入れ替えの必要性はない。

DICE version 0.1

標題の通り、ようやくDICEのバージョン番号付き正式リリースを迎えることができた。サーバアプリケーションに要求される一定水準のavailabilityを達成したことにより正式という冠とバージョン番号を付けた。そもそもバイナリは2週間以上前に出来上がっていたにもかかわらず他の作業に充てる時間の都合が付かず配布にこぎ着けるのが遅れてしまった。これからも評価版としての配布が続行される。運が良ければ年内にもう一度だけ バージョンアップできるかもしれない。現在DICEは少なくとも2つの点でMicrosoftが提供するあるコンポーネントに依存しているのでどちらか、もしくは双方を取り除き代替物を組み込む予定である。DICEのコアを利用した別のアプリケーションも作りたいけれど時間がない。とにかく生産性を上げる手段を見つけるしかない。この無力感をどう償えばよいだろうか。少なくともこの鬱陶しいサイトの更新で焦燥が紛れないのは確かだ。
read more »

DICE Technical Notes II

前回は、 DICEの初めての配布に際して、近年のIRC周辺の状況と、DICEに実装するIRC機能セットの選択基準について述べた。ただし観念的なバックグラウンドから具体性のあるデザインを抽出し計画を整形する過程の最中で書き留めたものであり、曖昧な部分が数多く存在した。当時の実装は、着手してから半年経過し最初のベータテストに臨んだばかりの段階で、一応のIRC/opennapサーバ機能は備えたとはいえ不安定で、明らかに改善の余地を残していた。現在では、さらに半年の検証と調整を経て、長期運用と数千の同時接続に実際に耐えることができる初めての正式バージョンのリリース(DICE v. 0.1)に至っている。そこで今回は、DICEの汎用ネットワークサーバとしての側面、バージョン0.1リリースに至るDICEの方向性の変更、また opennap準拠サービス(VirtualDirectory)の実装の詳細など、経験に基づいた視点をより多く加えつつ、現時点でのDICEの特性とその背後の意図を解説してここまでの記録としたい。

read more »

sup

忙殺

現在DICEは配布停止中である。というのも次バージョンのリリースが2週間近く遅れてさらに未定扱いとなってしまい、今後について逡巡してるのである。UT2K3も今週末には出ちゃうし… どうしよ。それはともかくいやーMafiaいい出来だ。GTA3よりずっと深みがあるし同時期に製作されたとは思えない。

sup

初夏の訪れ

半年と下で書いているがあっさり1月で次の更新が来てしまった(DICEをDICE prototypeとして更新版をリリース、VirtualDirectory単体動作を可能とした)。DICE prototype(DICEの単体動作版)はこれで事実上の最終版なので、次回更新は未定である。

前回更新後、Dungeon Siegeのシングルプレイヤーをクリアしたがエンディングがやや淡白であるように感じた。マルチプレイヤーの存在が前提となっているにせよ、洋ゲーのいわゆる大作とされるゲームのシングルプレイヤーで、エンディングに大クライマックスを持ってきたものには近年お目に掛かったことがない。何か食い足りないのである。かつてのメモリ量に厳しい制約のあるコンソール向けゲームは執拗にエンディングを引き延ばしてじらすものが多かったのでそのリズムが肉体に刻み込まれているに違いない。次はMorrowindGTA3SoF2だ!(と書きつつMorrowindは既に放棄)

VIAチップセットのM/BにPC2700メモリを挿してBIOSのメモリアクセス設定をパフォーマンス優先にしたところいわゆるビッ ト落ちが起きてしまった。その結果、HDDからの大き目のファイルの読み出しでCRCエラーが発生するようになった。またVC++はコンパイラ内部エラーを3回に1回出すのでVC7のバグかと勘繰ったが当然そんなことはない(gccのベータでC++のコードをコンパイルした場合ならあり得る話なんだけどね)。VIAの掲示板はこの件で大荒れしていたが幸い自分のPCではメモリアクセス設定の変更で解決した。しかしそれに先立って20GBのデータをHDD間でコピーし4GB分のデータをDVDに焼いていた… 無事を祈るばかりである。

sup

春雨

先月から不覚にもDungeon Siegeにのめりこみ、気が付いたらシングルプレイ中盤を超えていた。反省しつつ中止する。次にプレイするのは半年後だろうか。 Unreal Tournament 2003後に再訪の線が濃厚である。Unreal 2は来年?

PCゲーム情報、PCゲーム用ハードウェア/ソフトウェア情報は、GameGuruがよろしい。先日は英語のサイトばかり紹介したので、英語に関する面白いサイトを2つ。Japanese Engrish(sic)は日本人の愉快な英語を取り上げ、amirightには聞き取りにくい英語の歌詞や替え歌が集められている。

ゲームを中止するとともに、本日DICEの初めての改版をアップロードした。DICEに関しては今後4-6か月程度は更新を期待できないので、先の初回リリースバージョンでダウンロードをためらわれた方がいたとすれば、今度こそ気兼ねなくダウンロードして頂きたい。そして半年間ながら、さようなら。

sup

リンク紹介に代えて

ブラウザを起動して真っ先に見るのはSlashdotだ。日本版もあるが、輸入品の常かはたまた輸入業者が悪いのか見るに耐えない代物になっているので(まずもって”アレゲ”というのが本質的な意味で頭が悪そうでキモい)、もっぱら本家のみ見ている。Slashdotは基本的にU.S.のサイトで“United States”というニューストピックもあるので、日本に持ってくるのが間違いである。Slashdotを構成しているプログラムであるSlash (Apache+mod_perl+MySQL)を使って別個のサイトを作るのならまだしも、Slashdotのブランドをそのままコピーしたサイトを支持するというのはいかなる意味を持つだろうか。日本人=copycatという誹りは免れないだろう。テクノロジを真似るのは大いに結構だが、精神やスタイルまで真似る必要は無い。もしくは、そう悟られてはならない。その意味で、日本版Slashdotには、VA Linux JapanのPR部門以上でも以下でもない非常にナイーブな試みであるという印象を禁じ得ない。一昔前の雑誌や最近のTV番組でアメリカのフレームワークを輸入して使用するものがあったが、インターネットではその類に出会いたくないものである。というのは、海 外だろうがどこだろうがダイレクトに一次ソースへ到達することができるからだ。そして、Slashdot自体が既に、インターネット上の他のサイト(含ニュースサイト)をポインタとして情報を伝えるサイト、つまり二次使用素材(悪く言えばパクリ)を主とするmeta weblogなのである(時折運営側による大して面白くない問題提起が行われるにしても)。
read more »

Early DICE Design Notes

About 2 years ago, I opened an IRC channel on a small IRC network. I’d been hanging out in EFnet, Undernet, or DALnet, but the accessibility to those large networks from Japan was not decent and not much improvement is seen even today. In some networks you are just kicked because you are from the .jp domain. As a consequence, I chose a small but reliable place for the new channel among many networks. It had nickserv and chanserv. One of the largest networks known in Japan, IRCnet, lacked those services.
read more »

ComponentID

Win32のUUID(GUID)構造体のラッパークラス。VS.NET2003付属STLのhashコンテナ(hash_map/hash_set /hash_multimap/hash_multiset)用比較関数、SGI系STLのhashコンテナ用ハッシュ関数オブジェクト付き。システムの用意した構造体を継承してクラスを作るというのは割とよくやる方法で、継承した場合vtableが無ければメモリレイアウトの先頭に継承元が入るので、後ろに追加のデータをペイロードとして付けた上で、親の構造体を引数とするAPIの引数に使えるという利点がある。換言すれば、templateと、template policyを利用したmix-inによって、C++における継承は、Java等のクラスライブラリに顕著な、現実世界やデザインパターンとして観念されるモデルのマッピングに近いカテゴリ概念の素朴な具体化のための道具というよりは、本来の意味でのデータ抽象/アルゴリズム抽象に向けての手段として、あるいはCOMのバイナリ仕様の表現として活用(exploit)される箇所しか出る幕が無くなってしまった。

read more »