スタートアップの場所

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionrun

Typing of the dead PC 版。LAN 対戦をしてみる。入力のとりこぼしっぽい現象が見られたが,それ以外は全然問題なくプレーできた。

上記の現象,1 人が入力中に同時にもう 1 人が入力するとかなりの割合で miss になる,という感じ。マジシャンは大苦戦。

Typing of the dead PC 版を買う。なかなかいい感じ。早速ネット対戦を試みるも遅すぎて断念。

少し前から,プロバイダ他から来たメールを携帯(DoCoMo N502i)のリモートメールアドレスへ転送するようにしていたのだが,今日携帯を見ると,本体のメールが一杯でセンターにメールを預かっている,という表示になっていた。

マニュアルで調べてみると,「本体のメールは 100 件まで保存され,未読のメールは削除されない」とあった。なーる。未読が 100 件たまったのね。と,「全て既読」を選択。しようと思ったらそんな機能は(見あたら)なかったので地道に 1 件 1 件既読にしました。


IE5.5 をこの前入れてみた。そしたらなんか存在しないドライブ W が 2 つ増えた。

で,サービスパックが出てるようなので入れてみようかな,と思ってダウンロードして実行。したけど,これは実行中にインターネットからダウンロードするですか。常時接続環境でダウンロードして家でインストールはできないですか。なんか雑誌とかついてないかのう。

brpuzzle Java アプレット・アプリケーション版を公開


ライブラリのリンクで

fatal error LNK1202: "xxxvc60.pdb" には参照モジュールに対するデバッグ情報がありません

と言われる。これはライブラリを作成したときの vc60.pdb を削除していたからだが,ライブラリのプロジェクトの設定で [C/C++]-[デバッグ情報] を「行番号のみ」等 pdb を使わない設定にしておけば vc60.pdb がいらなくなる。

Java で jar ファイルをダブルクリックで起動する方法。

Main-Class: mainclass

のようなファイルを作成し,

jar cvfm app.jar manifest *.class

のように jar ファイルを作成する。

KVM。Graphics.drawBorder で思うように描画されない。いろいろ試してみると,このメソッドの引数の,幅,高さはそれぞれボーダーをいれない大きさらしいことが分かった。


Java。今までコンパイル時に -J-Djavac.pipe.output=true を使ってエラー出力をファイルに出力していたが,JDK1.3 になってできなくなったらしい。別アプリでパイプ入出力を介してやるしかないんですかね。

brpuzzle をとりあえず公開してみる。


J2ME でのコンパイル方法。

set PATH=%PATH%;c:jdk1.3bin;c:j2me_cldcbin
set CLASSPATH=.;c:j2me_cldcbinapiclasses;c:j2me_cldctoolspalmclasses
javac name.java
preverify -d . name
java palm.database.MakePalmApp -bootclasspath c:j2me_cldcbinapiclasses -icon name_32.bmp -smallicon name_16.bmp -creator NAME name

こんな感じ。

15 パズルを Palm + KVM で作る。PalmIIIc に付いてくる 15 パズルでは Brandish で鍛えた私には暇つぶしにもならないので 4~100 パズルを作成したわけだが,やはり C で作るのと違って簡単にできた。

「Palm で動く電卓を作ろう計画」を立ち上げていたのだが,挫折。

  • デストラクタや throw を使うとリンクエラーが出たりする。
  • 構造体にクラスを入れるとリンクエラーが出る。
  • sin,cos などが標準では未サポート。
  • double がきちんと使えない。
  • CW Lite のエディタが変。

などが理由。もちろん単に自分が使い方を知らないだけというのもあるだろうし,いくつかはライブラリを使えば解決するものもあるが,そのライブラリもなんか…ということで。

標準ライブラリなしの C 言語と API だけで開発することもできるが,作ってて全然楽しくない。ということで,はっぱ氏お勧めの KVM もやってみようという感じ。

j-phone。前にある店員さんが「16 和音で人の声が出せる」と言っていた問題だが,なんとなく分かってきた。j-phone では FM 音源とは別に PCM 音源を搭載し,そこでサンプリング音声を出せるようだ。

PCM を搭載しているなら当たり前な話だが,しかし店員さんはしっかりと「16 和音なら出せる」と言っていたのでいずれにしろおかしいのだが。

VS に VSS のプロジェクトを挿入するときに,VSS と関連づけてくれない場合がある。その時はプロジェクトの挿入ダイアログの,「ソースコード管理のプロジェクトを開く」で追加すればいい。

Code Warrior Lite for Palm,デストラクタを作ると delete がない,というリンクエラーが出る。デストラクタを定義しなければいいんだけど…。うーん。

UNIX で “.r” というファイルを作った。ていうかいつの間にかできていた。これは . の後に改行コードが入っているのだが,どうやっても消えない。

今まで j-sky 用の Web ページ(MML)の情報がなかなかなかったような気がするが,いろいろと公開されてきたようだ。特に j-phone の絵文字の仕様がやっと公開されていてよかった。

ちなみに EzWeb には「マイデッキエディター」,「マイデッキエディター Pro」という公式ソフトがある。これはなかなか素晴らしいソフトで(以下略)。


はっぱ氏がある SDK を使っていたが,へッダ内に以下のような記述が。

#define Stop 0xFC
#define Active 0xFE

こんなよく使うものを define するとは,とはっぱ氏はお怒りであった。

はっぱ氏作の Unix/Win 用ソケットラッパーを使う。FTP オープンができずに困ったが,アプリケーションの最初で AfxSocketInit() を行うことで解決。

CCalc をバージョンアップ。


F1 キーでのヘルプを出ないようにする方法。CWinApp::WinHelp() をオーバーライドする。


コンボボックスでの Enter キーを取得する方法。今まで コンボボックス内のエディットボックスをサブクラス化し,WM_USER を発行して以下のように取得していた。

WM_CHAR->WM_USER->処理関数

だが,よく調べてみると,WM_CHAR の部分が呼ばれてなく,何故か 1024 番(=WM_USER)のメッセージが直接とんできて結果的に処理されていただけだった。コンボボックスで Enter が押されたときに MFC が勝手に 1024 番のメッセージをとばしているようだ。

で,気持ちが悪いので改善。CComboBox から派生したクラスを作り,その中の PreCreateWindow メッセージ内で処理するようにした。これでうまくいって,さらに,今まで Ctrl+Shift+H で勝手にバックスペースになってしまう,となっていたのも回避することができるようになった。

Palm を購入。というわけで Palm アプリを開発していきたい。


ある店に携帯を見にいく。その時の店員の話。

「j-フォンは 16 和音なんですよ。これだけあると犬の声とか人間の声も出せますよ。」

…なんか違う気がするんですけど。

i-mode C-HTML。フォームの URL に何も書かないと,IE5.0 ではそのディレクトリのインデックスを表示するが,i-mode ではボタンを押しても反応しない。

STL。ある vector に他の型の vector の要素を insert しようする。

vector<A> a;
vector<B> b;
b.insert(b.end(), a.begin(), a.end());

こんな感じだが,VC++ ではコンパイルエラーになった。これは多分メンバ関数テンプレートを完全にサポートしてないからなワケだが,なんとかならないのか。

ある Web ページで占いをやっていたのでやってみる。生年月を選んでスロットを止め,そしてボタンを押す。すると,見慣れたものが! というか Perl のソースが表示された。なんかの設定が変なんだろうが,これって 1 回でもテストすれば分かるのでは…。

VC で Resource View を追加する方法。

リソースを追加し,.rc を保存。で,[プロジェクト]-[プロジェクトへ追加]-[ファイル] で .rc と resource.h を追加する。

static なコールバック関数を呼ぶ。が,動作がおかしい。いろいろ調べてみたところ,基底クラスと派生クラスで同じ名前のメソッドを作っていた。

XML4C を使う。この中に XMLString をローカルな文字列に変換する関数,transcode というのがあるのだが,この関数は内部で new した文字列を返す。当然後で delete しなくてはならないのだが,ここで問題が発生。XML4C のライブラリは DLL になっているので,DLL で new したメモリを exe 側で delete しなくてはならず,デバッグ版(だけ?)ではメモリ管理の不整合が起きて assertion されてしまう。

結局こんな感じで無理矢理解決。

DOMString dom_str("aaa");
const XMLCh *xml_ch = dom_str.rawBuffer();
char local_str[255];
XMLString::transcode(xml_ch, local_str, dom_str.length());

DiabloII を 3 つ買う。これで 4 つ目だ。

STL。vector::back() でコンパイルエラー。これは begin(),end() と違って iterator じゃなく reference を返すのか。

ワーカースレッドからスレッドの作成元の CDialog::UpdateData() を呼び出したりすると Assert が発生する。これは CWnd のポインタが複数スレッドでの共有を許していないからで,PostMessage とかでウィンドウハンドルを使ったメッセージ経由でやりとりすれば大丈夫。

忙しくて日記を書く暇がなかったというか何もなしじゃ寂しいので。

ある場所で TeX をインストール。本からではなくてネットからおとしてインストールしたのだが,今までと違うところがあったのでメモ。

2000/05/13 日記,適当 TeX template ファイルだが,

MakeTeXPK ^s ^d ^D ^d/^D canonbjc

MakeTeXPK という実行ファイルがなかった。これはmktexpk という実行ファイルで代用。引数は詳しく調べてないが問題なかった感じ。で,あと,canonbjc というのはうちの環境用なので,とりあえず上の

cd c:texsharetexmffontspkcxpubliccm

に合わせて cx にする。もし違う大きさのフォントが必要なら,c:texsharetexmfmetafontmiscmodes.mf から dpi が近いフォントを探してそれにし,template の上の各行を変更し,ディレクトリも作成しておく。

最終的な template。

%1st
set PATH=%PATH%;c:texDVIOUT;c:texbin
set TEXMF=c:texsharetexmf
set TEXMFCNF=.;c:texsharetexmfweb2c
c:
cd c:texsharetexmffontspkcxpubliccm
%2nd
mktexpk ^s ^d ^D ^d/^D cx
%3rd
copy c:texsharetexmffontspkcxpubliccm*.tfm c:texsharetexmffontstfmptex
del c:texsharetexmffontspkcxpubliccm*.tfm
del c:texsharetexmffontspkcxpubliccm*.log
del c:texsharetexmffontspkcxpubliccm*.gf

同じく TeX。今までグラフィックを eps ファイルでやっていたが,今回 bmp でやってみたらうまくいった。前にも bmp でやったことがあって,うまくいかなかったんだけどバージョンを新しくしたからだろうか。こっちはよく分からない。

namazu をインストール。まず UNIX でのインストールだが,namazu や kakasi が最初から入ってたので,インデックスを作成して .namazurc を書いてすぐに完了。この日記が検索できるようになった。バンザイ。

おまけで Win98 にもインストール。Perl はセットアップされていたので nkf,kakasi,namazu をインストールし,インデックスを作成。…のはずだが,起動しない。Perl のライブラリでエラーが出る。なんかライブラリのバージョンと Perl 本体のバージョンが違うとか何とか。ウーン,とか数十分かかって原因判明。他のソフトに Perl.exe ってのが入ってた。しかも古いバージョンで,パスが最新版より前に入っていたので,そっちが読まれたらしい。

てな感じでローカルでも(コンソールで)検索できたが,次は HTTPD で,ってやってみたが,namazu ではなく namazu.cgi で起動しろ,とか言われた。とりあえず保留に。

でも kakasi の形態素分析とか namazu の全文検索とかこれがフリーで公開されてるってのはスゴイですな。

CGI。あるサーバーでテスト的な CGI を動かそうとするが,Internal Server Error となる。Apache のエラーログには,premature end of script headers とある。

で,web でいろいろ調べたところ,Apache のセキュリティ機能が強化され,実行権限がユーザー権限になり,さらにパーミッション的に危険な CGI が実行できないようになったらしい。

#って実は今更な話なのかな?

というわけで CGIスクリプト を置くディレクトリを 755,CGIスクリプト を 544,書き込むファイルを 644 とすることで実行された。

パーミッションが足りない,ってのは分かりやすいけどパーミッションが多すぎる,ってのはなかなか気付きませんね。

メモリリーク。

AAA *p = NULL;

try
{
    AAA *p = new AAA;

    // 例外を throw する関数呼び出し
    func_with_exception();

    delete p;
}
catch(exception &)
{
    if(p != NULL)
    {
        delete p
    }
}

つまり p というポインタを例外ハンドラで削除しようということだが,p が try ブロックで再定義されている。ので,例外ハンドラで delete しようとする p は当然外の p なので,必ず NULL って感じで。2 日くらい気付かなかった。