レジストリ肥大化は本当にまずいのか。

という、至って純粋な疑問が浮かんだために、ならば実験。

(夏休みですから・・。って関係ないか。

 

用意したもの

・レジストリに無駄なデータを大量に書き込むバッチスクリプト

・テスト用PC (PenM 2Ghz MEM:512MB)

 

観察

・最初はどーってことなく肥大化が進む。

system    は 117,440,512 バイト
software は 210,239,488 バイトでエラーが出る。

エラーが出た場合はREGコマンドは使用しているDLLファイルがおかしいとエラーを出し始め、

クリップボードについては「クリップボードのエラーです」と出て、

ワークグループの別のPCにアクセスしよう物なら、「リソースが足りないためこの処理を実行できません」とのこと。

ペイントでは大きい画像は勿論いじれないので、スクリーンショットなんて取ることはできず。

動画はとりあえず再生できるようでした。 (720×540 Divx エンコード  WMP で再生) ただ、初期化が極端に遅くなります。

マルチタスクがうまくできなくなってきます。

ネットワーク接続自体がおかしくなってきます。

キーボードの入力もおかしくなってきます。

DHCPでのIPアドレスの取得に相当時間がかかります。(5分や6分じゃ終わらない。

どこまでもプログラムが遅くなります。

字を忘れ始めます。

シャットダウンにどこまでも時間がかかります。

でも起動は特に変わらず。ふーしぎー。・・と思ったけど、ログイン画面が出てこない・・。あ。出てきた。

「やうこそ」からデスクトップが出てくるまで時間がかかります。

 

とまぁ。非常に危ない状態になります。

でも、普通のXP の環境でしたら SOFTWARE ファイルでも、5~6MBぐらいですから・・。

(多くても数十MBぐらい。100MB越えはしないかと。)

レジストリクリーナーを本当に実行しなければならないほど肥大化することはなさそうです。

でも高速化しそうですのでやってしまいます。でも、Vista のメインマシンでは不安なのでやりません。

適当な覚え書き。 HSP で PARAFORMAT2

なんでこうC++ で書かなかったのだと思うところではありますが、

しょうがないのでSDKのRichedit.h に書いてあったのをHSP風に解釈

 

———————————————————- (Richedit.h より抜粋。 持ってきて良いのかは疑問だけど。)

typedef struct _paraformat2
{
    UINT    cbSize;
    DWORD    dwMask;
    WORD    wNumbering;
    WORD    wReserved;
    LONG    dxStartIndent;
    LONG    dxRightIndent;
    LONG    dxOffset;
    WORD    wAlignment;
    SHORT    cTabCount;
    LONG    rgxTabs[MAX_TAB_STOPS];
     LONG    dySpaceBefore;            // Vertical spacing before para           
    LONG    dySpaceAfter;            // Vertical spacing after para           
    LONG    dyLineSpacing;            // Line spacing depending on Rule       
    SHORT    sStyle;                    // Style handle                           
    BYTE    bLineSpacingRule;        // Rule for line spacing (see tom.doc)   
    BYTE    bOutlineLevel;            // Outline Level                       
    WORD    wShadingWeight;            // Shading in hundredths of a per cent   
    WORD    wShadingStyle;            // Byte 0: style, nib 2: cfpat, 3: cbpat
    WORD    wNumberingStart;        // Starting value for numbering               
    WORD    wNumberingStyle;        // Alignment, Roman/Arabic, (), ), ., etc.
    WORD    wNumberingTab;            // Space bet 1st indent and 1st-line text
    WORD    wBorderSpace;            // Border-text spaces (nbl/bdr in pts)   
    WORD    wBorderWidth;            // Pen widths (nbl/bdr in half twips)   
    WORD    wBorders;                // Border styles (nibble/border)       
} PARAFORMAT2;

———————————————————-

参照:MSDN – PARAFORMAT2 Structure()

http://msdn.microsoft.com/en-us/library/bb787942(VS.85).aspx

 

宣言 HSP変数 メンバ名 オフセット サイズ
UNIT cbSize pfm2(0) cbSize 0 4
DWORD dwMask pfm2(1) dwMask 4 4
WORD wNumbering
WORD wReserved
上位ワード
下位ワード

pfm2(2)

wNumbering
wReserved
8
10
2
2
LONG    dxStartIndent pfm2(3) dxStartIndent 12 4
LONG    dxRightIndent pfm2(4) dxRightIndent 16 4
LONG    dxOffset pfm2(5) dxOffset 20 4
WORD wAlignment
SHORT cTabCount
上位ワード
下位ワード

pfm2(6)

wAlignment
cTabCount
24
26
2
2
LONG    rgxTabs[MAX_TAB_STOPS] pfm2(7) ~ pfm2(38) rgxTabs 28 128
LONG    dySpaceBefore pfm2(39) dySpaceBefore 156 4
LONG    dySpaceAfter pfm2(40) dySpaceAfter 160 4
LONG    dyLineSpacing pfm2(41) dyLineSpacing 164 4
SHORT    sStyle
BYTE  bLineSpacingRule
BYTE  bOutlineLevel
上位ワード
上位バイト
下位バイト

下位ワード

pfm2(42)

sStyle
bLineSpacingRule
bOutlineLevel
168
170
171
2
1
1
WORD    wShadingWeight
WORD    wShadingStyle
上位ワード
下位ワード

pfm2(43)

wShadingWeight
wShadingStyle
172
174
2
2
WORD    wNumberingStart
WORD    wNumberingStyle
上位ワード
下位ワード

pfm2(44)

wNumberingStart
wNumberingStyle
176
178
2
2
WORD    wNumberingTab
WORD    wBorderSpace
上位ワード
下位ワード

pfm2(45)

wNumberingTab
wBorderSpace
180
182
2
2
WORD    wBorderWidth
WORD    wBorders
上位ワード
下位ワード

pfm2(46)

wBorderWidth
wBorders
184
186
2
2

 

適当に書いてみましたが、こんな感じかな・・?

あっていればいいけれど。

 

んー・・。それより前に疑問なのが、

PARAFORMAT2 構造体をHSPで使う人って居るのかなぁ・・。なんて。

もしかして自分だけかも?なんて思いますが、

一応需要があったらいいなー。と

 

HSPで書く人への補足

cbSize は 188 バイト。

それと、ワード・バイトの書き込みは、

wpoke とか poke とか使うと楽かも。

逆は wpeek と peek

 

そんなわけで、一応書いてみると、

 

dim pfm2,47

pfm2(0)=188

 

ってなかんじで。

 

そんなわけで、

・間違いを発見した人

-> すぐに教えてください。

・これを見て書く人

-> 少しでも生かせれば幸いです。

Windows Live Messenger への曲通知。

ふと。

フリーソフトの H2k6 を使っている友人から

「曲通知したい」と。

作ってみました。

 

なかなか簡単なシステムで。わかりやすかったです。

最初はタイトルバーから取得しようかとも思っていたのですが、

見てみれば、再生時にコマンドラインを指定してプログラムを実行するオプションがあるじゃないですか。

 

ということで、これを使って・・。

http://mimumimu.net/software/#wlmis

Windows Live Messenger Music Info Sender.

つくってみました。

 

2010/02/13 
ここのページに飛んでくる人が多いのに、ダウンロードリンクを的確に指していなかったので、

上記リンクを現在の物に変更しました。

 

1.ダウンロードして、H2k6 と同じフォルダに send.exe を置く。

2.オプション -> 設定 -> トリガーに以下のように設定

演奏開始時 : send.exe %tagTitle%\0%tagArtist%

演奏停止時 : send.exe

 

これで再生時に通知されて表示され、

止めたときに消えます。

 

そして・・。

いちおーこのプログラム、

取っても単純で、

send.exe に続いて (曲名)\0(アーティスト)

を送りつけるだけで動きます。

新しいソフトウェアのサポートや

既存のソフトウェアに曲通知機能を付けたり。引数指定で起動できればどんなプログラムでも利用可能です。

 

—————————-

今回使用させていただきました 「H2k6」のダウンロード先

http://hogehoge2006.genin.jp/

 

————————————————————

P.S.

プログラマーの皆さんにいろいろと。

まず引数についてですが、チェックは何もやってません。(うわぁ。

あと、(曲名)と(アーティスト)のあいだの\0 ですが、

これは 0x0000 の \0 ではありません。

0x5c,0x30 の \0 です。

もっと言えば、 \0 ではなくて \\0 になりますね。

単刀直入に言えばただの文字の「\0」です。NULLとかじゃなく。

 

そして、もっと恥ずかしいことを言えば、

この通知のプログラムを組んだことのある方はもう説明書きを見たときに、

「こいつ・・・何手抜きしているんだ」と内心思っていたと思います。

そうなんです。

内部的に曲名とアーティスト名の区切りは \\0 で行うようになってるんです。

本当は曲名とアーティスト名を指定するときに、もっと優しく指定できるようにすべきなのかも知れませんが、

実際の所、このように引数を指定すると、実に内部構造が楽なんです。

そのまま与えて、あとは適当に設定すればいいんですから。

んー・・。手抜き過ぎるかな・・。

文化祭の時のポスター。

文化祭の時の情報処理部のポスターで、
できがすばらしすぎるやつをコピーして持ってきました。
貼り付けても良いよと言うことでしたので、張っておきます。

やっぱり、これは芸術ですよ。

情報処理部ポスター

なお、スキャナーでは大きすぎたので読み取れず、
携帯での撮影によるものです。

ガンパレード・マーチを解析

ガンパレード・マーチには、
使われていないコード、テキストなどが多数含まれています。

そのコードを、
「改造」という物を使用して無理矢理動かしてみた結果です。
お遊び程度に使用してください。

また、
・ゲームは最低二回プレイ
・ドラマCDを聞いたことがある

というような条件に当てはまる方でないと、おすすめできません。

続きを読む