2007年07月29日

川口ぃッッ!

あれは勝てたPK戦だったのに!!
このPK戦で寿命が1年縮まった・・・・。
DSCF0352.jpg

でもこのPK戦は運が悪かったとしか言えないな。川口めちゃおしいし。ハズレくじを引いた羽生もかわいそうだ。
そして羽生のWikipediaの項目が速攻書き換わっててわろた。
そして羽生の公式サイトは混雑しててつながらないw

羽生のWikipediaの項目は更新合戦が始まっててにちゃんねらが荒らしてるようだ。リロードするたびに変わってる・・・。例によってhyde156cmネタがw
> またhydeより身長が11cm高いことも広く知られるようになった。
> 小兵のトップ下。シャドウストライカーとして1.56列目からの飛び出しが魅力。

写真は今日のぷー。
猫は暑いと伸びる。
今日はさすがにエアコンをONにしたくなったけど、まだまだ扇風機で耐えるぞ!

2007年07月27日

Advanced/W-ZERO3[es]

Advanced/W-ZERO3[es]出たな~。ちょっと欲しい。

スクリーンショットで解説するウィルコムの「Advanced/W-ZERO3[es]」
> こちらはパソコンで録画した動画をDivXに変換したもの。
ん?モザイクかかってるけどこれひぐらしのタイトルと「嘘だッ!!」だなw

新しいW-ZERO3、AB氏にはボロカスに言われたりする。
Advanced W-ZERO3[es]が来ました
確かにWindows Mobileのクソっぷりには同意するし、記事全体にもおおむね同意なんだけどなんだろうこの気持ち悪さは。
AB氏の絵は好きなんだけど痛いMac信者なのは悲しいことだ。
でもMacやiPhoneのように、UI LaFが統一されていてスバラシイというのは同意するな。(使ったことがないので他の人の意見を聞いてそう判断)
LinuxなんてqtやGtk、Motifが混在しててLaF統一の"と"の字もないw
もちろんLinuxは統一よりも選択を優先するのでそれは"Linux的に正しい"と言えるだろうけど。
そもそもヘビーなLinuxユーザは「やりたいことのすべてはCUIでできる。GUIはCUIのFacadeでしかなく本質でない。本質ではないGUIについて悩むのであればその時間をもっと有意義に使うべきだ。」とか考えているのかもしれない。

そんな俺は家でも仕事でもWindowsとLinuxの両刀ユーザ。
Windowsのすばらしいところは、すべてGUIで操作できること。
Linuxのすばらしいところは、すべてCUIで操作できることだ。

2007年07月26日

Log4cxx続き

昨日のAssertionで失敗していたところのコードを見てみたらsedを起動しようとして失敗していたようだ。
と言う事でcygwinをPATHに追加したら成功。ただ、別の箇所でも3箇所ほどテストに失敗していた。

とりあえずbuildしてdllを作成して、includeファイル設定して#pragma comment(lib, "log4cxxd.lib")とかしてDLLを追加したら無事ロギングできるようになった。
ただ、VC++のプロジェクトのプロパティで、「構成プロパティ」-「C/C++」-「ランタイムライブラリ」を「マルチスレッド デバッグ DLL (/MDd)」にしなければコンパイルでエラーになった。
1>libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
1>libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
1>libcpmtd.lib(stdthrow.obj) : error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z) で参照されました。
な感じのエラー。

イマイチVC++がわかっていないのでこのオプションの変更で具体的にどういう変化がありこのエラーが出ているのかはわからない。
とりあえず俺の愛するログ出力ができるようになったので、C++での開発も楽になるだろう。
Javaと違い、ソースコード上の何行目で吐いたログか表示できないようだ・・・と思ったらできた。
 logger->info("てすと");
などのようにするとどのファイルの何行目かと言うのは記録されないが、
 LOG4CXX_INFO(logger, "Entering application.");
のように書くとどのファイルの何行目かが記録される。
たとえば以下のように出る。
 2007-07-26 00:51:48,621 INFO Client(c:\users\長いので省略\test.cpp:40) - Entering application.
見たいな感じで。
Javaだとファイル名だけ出るけどC++版はフルパスで出るんだな。おしり20文字分とかしないと長くなる。

うむ。なんだかモチベーションがあがってきたぞ!

2007年07月24日

Log4cxx

プログラミング時にデバッグ方法はいろいろあるけど、その中でログ出力は一番シンプルかつ重要な方法だ。
バグを追いかけるときに役立つし、その動作の状態がファイルと言う後に残る形式で出力されるからだ。
JavaだとLog4jを使って高機能なロギング機能を使うことができるがC++では・・・。

Log4jをC++に移植したLog4cxxがあるが、なんとググっても日本語での情報が80件しかない。
ふ~む、C++では高機能なロギングは必要とされていないのか?
確かにJavaだとサーバサイドのアプリケーションが多く、そういうアプリケーションにとってはロギングは最重要な関心事だ。致命的なエラー時のログはsyslogに出して担当者にログをメールで送信したり、ログファイルを1日おきとか10Mbyteごとにローテーションしたり。一番重宝するのが"どのファイル"の"何行目"で"どのロギングレベル"でログを出力したかがわかることだ。
C++だとクライアントプログラムが多いからそういう高機能なロギングは必要ないのだろうか。

C++でも「今はこのモジュール開発中だからこのモジュールだけデバッグレベルのログ出力でその他はエラーレベルのログ出力」とかしたいと思うんだけどなぁ。ifdefでデバッグ出力のオンオフは低機能すぎるだろうし、コンパイル時にしかログ出力の設定ができない。

と言う事でとりあえずLog4cxxを使うと言う方向で進めよう。
環境はWindows VistaのVisual Studio 2005 C++

Log4xxの入手は公式サイトで。
ただし、ここにおいてある"最新版"の0.9.7は古すぎる。
CVSリポジトリにある開発版は0.9.7からずいぶん変わっているようだ。0.9.7を使わず、Subversionから最新のソースを取得し、コンパイルする。

コンパイルはビルドツールのantを使う。C++なのにMakefileはもう使わないんだな。Java以外のビルドもantに変わってきているようだ。
INSTALLファイルを参考に、「cpptasks.jar and ant-contrib.jar on CLASSPATH」と「The following files placed in the lib directory: apr-1.2.2.tar.gz apr-util-1.2.2.tar.gz cppunit-1.10.2.gz」をそれぞれダウンロードして指示のとおりにする。

Microsoft Visual C++の場合以下のようにしろと書いてあった。

$> set CLASSPATH=path_to_cpptasks/cpptasks.jar;path_to_antcontrib/ant-contrib.jar
$> path_to_vc\bin\vcvars32
$> ant

1行目のset CLASSPATH=云々はANT_HOMEのlib以下にjarをコピーしたので不要だった。
2行目は最初無視したが、これは無視したらダメで2行目を実行しなかったらコンパイラが不正な処理か何かで強制終了してしまう。
VC++のbin/vcvars32.bat を実行することでコンパイラの環境設定が行われるらしい。vcvars32.batを実行することでLog4jはコンパイルできた。

が、コンパイル後の自動単体テストでAssertion failedになってしまうw
application's support teamにコンタクトを取れと言われるが・・・。

以下のアサーションで失敗している。
Assertion failed: stat == APR_SUCCESS

APRとはApache Portable Runtimeで、WikipediaによるとOSとソフトウェアの間でOSなどの環境の違いを吸収するAPIを提供するとのこと。一応Log4cxxのdllはできているけどAPRのライブラリの使用で落ちているってコトはダメそうな悪寒。

ふいぃ、ロギング環境の構築で今日はギブアップ。もう寝る。

2007年07月17日

祇園祭

今日は宵山の真っ最中の四条近辺をうろついてきた。
と言ってもお祭りの中心部に行くと人が多すぎてしんどいので人の多いところは避けてぶらぶら。

お祭りがあると浴衣の女の子が多くて華やかでいいね。
店員さんも浴衣着てるのもナイス。

途中ロフトで以下の物資を確保。
モノクロブーと猫フィギュア。猫フィギュアはカエルの被り物をしてる猫が欲しかったんだけど当たらず。残念。
DSCF0345_sum.jpg

帰りに友達んちに寄ったらグル~ミ~とやらのぬいぐるみがあった。かわいいんだけど強暴で爪や口の周りに鮮血が飛び散っていると言うダークなクマらしい。なかなかナイスだった。

そして家かえってちょっと部屋片付ける。
ちょっと広くなった。
俺の部屋もナイス値内部パラメーターがちょっとアップ。

そして気持ちよく寝る。

2007年07月12日

Domain-Driven Design

最近会社でプログラミング、家でもプログラミングと言う生活が加速してる。
とはいえ技術的に新しいことにチャレンジしてるわけでもないので特に書くことは無い。淡々とコードを書く。

最近ネットで見つけた記事。
Domain-Driven Designのエッセンス 第1回
ま~た新しい開発手法か?と思ったけどそうではない様子。パターン的なものか。
今の俺にはあまり関係ない話だけど続きが楽しみだ。

"TDD Anti-Patterns" TDD のアンチパターン
Test-Driven Development (テスト駆動開発)でのアンチパターン。
あるあるwwwww と思ってしまうとダメな証拠。

TDDでのイイ本って無いかなぁ。
今のところJUnitイン・アクションが一番良かったけど、もうひとつ何かこうヒラメキというかスッキリと言うか欲しいところ。


最近買った本
C++実践プログラミング
まだ最初のほうしか読んでないけどこれはなかなかよさげかも。
"実践"とあるようにプログラミング入門には難しいかもしれないけど、プログラミング経験者がC++勉強するにはいい感じだ。
それぞれの章に演習問題があるんだけどその問題が多少工夫されていて、「以下のプログラムは○○のように動くことが期待されるがそのようにはならない。なぜか。そして修正せよ。」と言った感じにバグ修正をメインとした問題が多いのが面白い。
6000円と値段は高めだけど、結構期待できる1冊の予感。


C++クックブック
C++で○○するにはどうすればいいんだっけ?と言うときにググらずに済む便利な一冊。

さて、本読んで寝よっと。


あ、そうそう。
絶望した!! ぱにぽにっぽい絶望先生に絶望した!!

2007年07月その他のエントリー