或曰

日曜日, 2月 26, 2006

読書記録:C#エッセンシャルズ 第2版


C#ならびに背後にある .NET 実行環境のリファレンス、ならびに .NET Framework クラスライブラリの概要をまとめた一冊。この手の技術書にしては薄手の本だけど、必要な知識がうまくまとまっている。C++, Java 等のクラスベース OOPL での開発経験があるプログラマが最初の一冊として読むには、良い本だと思う。

反面、OOPL の基礎的な話や、.NET Framework クラスライブラリの細かい使い方やチュートリアルは無いのでこれ一冊で全て OK というタイプの本ではない。

書籍とは関係ないが C# の言語仕様は C++/Java/Delphi なんかの経験を存分に活かして、良く練られているなと思った。値型/リファレンス型、仮想関数の扱い (override キーワードや基底クラスで仮想関数が追加された際にも破綻しないようにするためのアセンブリレベルでの拡張)、アトリビュート等々。

.NET Framework クラスライブラリを見ると正規表現やファイル I/O も使いやすそうだし、これまで Perl で書いていたちょっとしたツール類も、Windows 環境では今後は C# で書こうかな。

土曜日, 2月 25, 2006

梅と伊豆ツーリング

梅を見に、湯河原町の幕山公園へ。休日ということもあり観光客で大賑わいだったが、まだ梅は一部の木が花をつけたのみで満開にはほど遠く。例年より開花が遅れている模様。 散策路を一通り歩き、昼食を済ませて、その場を後にする。

伊豆スカイラインを走るために熱海峠へ向かう。国道135号沿いに南下し、県道11号を西に。先週雪が降ったということで路面状況が心配だったが、すっかりきれいになっていた。 富士山を眺めつつ、適度にスピードを乗せて走る。

引き続き河津桜を見に河津方面へ向かうため、伊豆スカイラインを冷川ICで降り、県道59号を西へ行くと、突き当たりで国道414号にぶつかる。国道414号を南下すると河津へ出るが、延々渋滞していたので諦めて引き返す。

国道414号沿いに北に向かい、国道136号を西進して仁科峠へ。仁科峠から南へは県道411号西天城高原線、北へは西伊豆スカイラインと、バイクで走るには楽しいワインディング路が接続している。


両方往復してみたが、路面凍結こそ無かったものの、道の端には雪が積もり、路面も濡れている箇所多し。まだ飛ばすのは危ないなぁという状況。

後はいつものコースで、修善寺道路・伊豆中央道とバイパスをつないで、東名沼津ICから東名高速に乗って帰路につく。首都高渋谷線渋滞のとの表示があったので、東京ICで降りてバイク屋さんへ。前回の点検後に取り寄せてもらったパーツを組み付けて、クーラント滲みの補修をしてもらう。その足でマジスパに寄り、夕食を済ませて帰宅。  Posted by Picasa

火曜日, 2月 21, 2006

issei.org ホスティング先変更

inetd から WebKeepers の VDS へ。

FreeBSD の jail (2) 環境なので、port 使って必要なソフト入れて、postfix と apache の設定しておしまい。DNS サーバも自前で管理することにしたので、ついでに TXT RR を設定して SPF と DomainKeys の設定もしておく。

jail (2) 環境だと loopback address (127.0.0.1) が使えないので、Postfix 用の DomainKeys 実装である dkfilter を安全に使うには、ちょっと細工が必要。dkfilter.in, dkfilter.out に下記のような修正を加えて、自ホストからの接続しか受け付けないようにした。

--- dkfilter.in.orig    Tue Feb 21 11:41:17 2006
+++ dkfilter.in Tue Feb 21 11:33:35 2006
@@ -112,6 +112,12 @@

while (1) {
$server->accept(%opts);
+ my $peeraddr = join('.', unpack('C4', substr($server->{'peeraddr'}, 4, 4
)));
+ if ($peeraddr ne $srcaddr) {
+ syslog("info", '%s', "DomainKeys invalid peer : $peeraddr");
+ delete $server->{"s"};
+ next;
+ }
my $client = MSDW::SMTP::Client->new(interface => $dstaddr, port => $dstpor
t);
my $banner = $client->hear;
$banner = "220 $debugtrace.$$" if defined $debugtrace;

SPF がメール転送と相性が悪い (~/.forward などを使って MTA レベルでメールを転送する場合、MAIL FROM を書き換えないため転送後の SPF の認証に失敗する) 問題は、SPF を普及させるための提案(2) とかが出てるんだが、どうしたもんかなぁ。ふだん issei@issei.org 宛のメールは Gmail に転送して読んでいるので、見事に引っかかる。

金曜日, 2月 17, 2006

VS.NET 2005 並列ビルド

複数プロジェクトあれば、プロジェクト単位で並列ビルドです。

Building Projects in Parallel

単一プロジェクト内で並列ビルドしたければ、サードパーティの IncrediBuild 購入。IncrediBuild は元々複数のマシンでビルドクラスタを構成するためのソフトですが、単一マシンで並列ビルドするためにも使えます(そのために買うには高いけど)。

Visual Studio 2005 は VC++ (ATL/WTL) 使ってる限りだと、クリティカルなバグはないような。まだ、あまり最適化周りとかいじめてないので、その辺つつくと分かりませんけど。

火曜日, 2月 14, 2006

issei.org

そろそろホスティングサービスの契約更新時期。

今使っている inetd も悪くはないが、FreeBSD の jail ベースで作った Virtual Private Server を US$15/mon. とかでサービス提供してる事業者があるので、そちらに移行しようかと検討中。締め切り月末。

root 権限をもらうとシステム管理が手間だが、VPS では kernel/標準ライブラリ/コマンド類についてはサービス提供者が保守する場合が多く、postfix, apache あたりのソフトウェアも portupgrade 使えば最小限の手間で維持できるかなと。

月曜日, 2月 13, 2006

お買い物

C# と .NET Framework のリファレンスとして一冊。MSDN Library に必要な情報は揃ってると思うが、ざっと読んで概要を把握するには書籍の方がまだ都合が良い。
ついでに赤石路代の P.A. コミックセットも注文。連載中に何話か読んで面白いと思ったけど、その後、読む機会がなくてそのままになってたので。

日曜日, 2月 12, 2006

ファイルアーカイブ処理

メモリセグメント周りの基礎機能がそろったので、ファイルシステムの設計中。細かい話になると色々と選択肢があるが、
  • 複数のファイルをアーカイブ
  • アーカイブ単位でのみファイルの読み込み/解放を行う
というのは確定。

次にアーカイブとそこに含まれる個々のファイルの識別子をどうするかだけど、柔軟にいくなら文字列で、プログラムやスクリプトのコンパイル時に存在しないデータへのアクセスをシステマティックに防止したいなら、アーカイブとファイルにそれぞれ整数値と対応するシンボル名を生成して割り振ってしまい、プログラム側はシンボル名でアクセスするのが確実。
(ただし、ファイル数やアーカイブ数が増える場合には、整数値の割り振り方などは工夫しないとビルド時間が馬鹿にならない)。

いずれにせよ、
  • アーカイブの一覧
  • ファイル一覧
  • 各アーカイブに含まれるファイルの一覧
を用意して、プログラムで処理する必要がある。この一覧の書式は、独自形式のテキストファイルで書いて自前でパースする、CSVファイルを使うといった方法があるが、今時だと XML 使うのが開発環境揃っていて楽だろうということで、ちょっと Microsoft の XML 関連ドキュメントを調査。

.NET Framework で使えそうなのは System.Xml.XmlReader と System.Xml.XmlSerializer かな。前者は XML 文書をファイルの記述順序に沿ってパースしていき、文書全体をオンメモリにキャッシュすることなく都度プログラムで処理していく。Java の SAX に近いプログラミングモデル。後者は XML 文書を直接 .NET 側のインスタンスに読み込んでしまう。Java だと JAXB に近い。

今回は読み込む XML 文書のサイズが小さいので、楽するなら後者だろう。C# の勉強がてら XmlReader 版と XmlSerializer 版を C# で書いてみる。XmlSerializer だと、必要な作業はこんな感じ。
  1. XML スキーマを書く。
  2. xsd.exe /classses でスキーマからクラスを生成。
  3. System.Xml.XmlSerializer のコンストラクタに上で作ったクラスの型情報 (typeof クラス名) を渡して、System.Xml.XmlSerializer インスタンスを作成。
  4. XML文書に対応するストリームを System.IO.File.OpenRead() などで作成し、ストリームを XmlSerializer の Deserialize() メソッドに渡す。
簡単だね。

しかし XML スキーマで NonNegativeInteger 型のデータは xsd.exe が自動生成するクラスだと int ではなく string 型にマッピングされるのが微妙だ。

バイク点検

初回点検時にクーラント滲みを指摘され、あと 1000km ぐらい走ったら再度持ってきて欲しいと言われていたので、バイク屋さんまで。見てもらったところ微妙に滲んでるそうで、パーツ取り寄せて補修の方向で。来週末にもう一度。

ついでに、電熱グローブ用にヘラーソケット(シガーソケットみたいなもの、ちょっとサイズが違う)を引き出してもらう。バッテリーから直接線を引き出して、フレーム下の適当なネジを使ってソケット共締め。ここだと、雨でも濡れない。工賃1,680円。

そろそろ河津桜や梅の季節。来週末は、バイク補修後に伊豆でも行こうかな。

土曜日, 2月 11, 2006

大黒海釣り公園

首都高使ってショートツーリング。海を眺めつつ、同じ世代のバイク乗りの人間と歓談して帰ってくる。

鶴見は 3 年弱住んでたけど、近所にこんな場所があるとは知らなかったなぁ。

プログラミング

仕事の一つとしてファンド系の要件定義ならびにシステム設計をやっている。システムはバックエンドに SQL Server, フロントエンドが Web (ASP.net/C#.net) と一部Accesss。

これに関連して C# のコード読み&レビュー。細かいことを言わなくてもまっとうな設計のコードが上がってきたので楽できてる。私がコードを読む場合、この規模/複雑さのプログラムなら、最低限のコメントがつけてありシンボル名がマトモならドキュメントは要らないのだけど、標準的なWebアプリケーションプログラマを想定するとクラス図/シーケンス図と、Webページ単位でのデータベース参照/更新については文書化しておいたほうが良いんだろうなとか検討中。

プライベートで DirectX 使って遊んでる件もチマチマと進めていて、デバッグ用のコンソール出力、ジョイスティック入力、デバッグ用のファイル読み込み、メモリをセグメント分割して管理するためのアロケータあたりまで。
メモリアロケータを書く過程で侵入型の連結リスト構造が必要となったので以前書いた C++ 版 TailQ を持ってきて、今風に書き直し。
しかし今にして思えば、リスト連結に使うポインタを名前で持たずにクラステンプレートに整数型パラメタを指定して使うようにすれば、プリプロセッサで小細工しなくて良かったな。ま、今更なので直さないけど。

C++ Boost Library を探してみたら、レビュー待ち に intrusive container が並んでいる。後で読んでみよう。

メモリアロケータ書いたついでに、いまさらながら FreeBSD で以前使用されていた phk malloc に関する paper 読みと、マルチスレッド用に書き直された jemalloc のコード読み。src/libc/stdlib/malloc.c は rev 1.93 で phk malloc から jemalloc に入れ替わったのね。jemalloc も paper あるんだろうか?

金曜日, 2月 10, 2006

マジスパ

ほぼ毎週行ってる。おかげで大半の定員さんに顔を覚えられる始末。

チキン、虚空100、スープ大盛りにまいたけと高野豆腐をトッピング。食後にココナツプリン(軟)。マジスパ会員と間違われて、幸せ小鉢(ナタデココとヨーグルト)が付いた。