« 2005年11月 | トップページ | 2006年1月 »

2005年12月31日 (土)

職人の技

心地よい木の香り…

最高のリクライゼーション…

檜風呂…

毎日が温泉気分に浸れる…かもかも…。

もちろん、買えません…。

でも、さわら風呂ぐらいなら買えそう…。

まあ…小市民なボケとしては、

タンブラー桶(木のコップ)

ぐらいで手を打ちたし…。

これで酒を飲んで…

昭和33年の東京下町…

ALWAYS~三丁目の夕日~

と洒落込む…。

きっとほんわか温かいに違いない…。

木の手触りを得たいのならここがお勧め。

小江戸三昧

| | コメント (0) | トラックバック (0)

2005年12月30日 (金)

無限ループ…ちょっとの違いがデッカイ違いに…?その2

蛇足だけど…

もし、「while(1)」を「for」で実現すると…

「for(;1;)」で同じになるかなぁ~と

void main(void)
{
    int    a    = 0;
    for(;1;)
    {
        a++;
    }
    while(1)
    {
        a++;
    }
}

をコンパイルしてみる…。

1:    void main(void)
2:    {
00401010   push        ebp
00401011   mov         ebp,esp
00401013   sub         esp,44h
00401016   push        ebx
00401017   push        esi
00401018   push        edi
00401019   lea         edi,[ebp-44h]
0040101C   mov         ecx,11h
00401021   mov         eax,0CCCCCCCCh
00401026   rep stos    dword ptr [edi]
3:        int a   = 0;
00401028   mov         dword ptr [ebp-4],0
4:        for(;1;)
0040102F   mov         eax,1
00401034   test        eax,eax
00401036   je          main+33h (00401043)
5:        {
6:            a++;
00401038   mov         ecx,dword ptr [ebp-4]
0040103B   add         ecx,1
0040103E   mov         dword ptr [ebp-4],ecx
7:        }
00401041   jmp         main+1Fh (0040102f)
8:        while(1)
00401043   mov         edx,1
00401048   test        edx,edx
0040104A   je          main+47h (00401057)
9:        {
10:           a++;
0040104C   mov         eax,dword ptr [ebp-4]
0040104F   add         eax,1
00401052   mov         dword ptr [ebp-4],eax
11:       }
00401055   jmp         main+33h (00401043)
12:   }
00401057   pop         edi
00401058   pop         esi
00401059   pop         ebx
0040105A   mov         esp,ebp
0040105C   pop         ebp
0040105D   ret

結果同じになった…。

だからどうだと言う訳では無いのだが…。

なんとなく確認…。

| | コメント (0) | トラックバック (0)

2005年12月28日 (水)

無限ループ…ちょっとの違いがデッカイ違いに…?

無限ループで良く見かける方法で「for (;;) 」と「while(TRUE)」とかがある…。

で、隣の人のソースを覗くと…「while(TRUE)」が使われている…。

でも、なぜかマイクロソフトのソースでは、「for (;;) 」を良く見かける…。

二つには、違いが有るのかなぁ~?と以下のソースをコンパイルしてみる…。

void main( void )
{
    int    a = 0;
    for(;;)
    {
        a++;
    }
    while(1)
    {
        a++;
    }
}

コンパイラの結果…。

1:    void main( void )
2:    {
00401010   push        ebp
00401011   mov         ebp,esp
00401013   sub         esp,44h
00401016   push        ebx
00401017   push        esi
00401018   push        edi
00401019   lea         edi,[ebp-44h]
0040101C   mov         ecx,11h
00401021   mov         eax,0CCCCCCCCh
00401026   rep stos    dword ptr [edi]
3:        int a = 0;
00401028   mov         dword ptr [ebp-4],0
4:        for(;;)
5:        {
6:            a++;
0040102F   mov         eax,dword ptr [ebp-4]
00401032   add         eax,1
00401035   mov         dword ptr [ebp-4],eax
7:        }
00401038   jmp         main+1Fh (0040102f)
8:        while(1)
0040103A   mov         ecx,1
0040103F   test        ecx,ecx
00401041   je          main+3Eh (0040104e)
9:        {
10:           a++;
00401043   mov         edx,dword ptr [ebp-4]
00401046   add         edx,1
00401049   mov         dword ptr [ebp-4],edx
11:       }
0040104C   jmp         main+2Ah (0040103a)
12:   }
0040104E   pop         edi
0040104F   pop         esi
00401050   pop         ebx
00401051   mov         esp,ebp
00401053   pop         ebp
00401054   ret

結論!

「for (;;) 」だとノーチェックの無限ループに対し
「while(TRUE)」だと無駄無意味なチェックが入っていることが分かる。

以下の部分が「while(TRUE)」の意味無しコードだ。
0040103A   mov         ecx,1
0040103F   test        ecx,ecx
00401041   je          main+3Eh (0040104e)

ちょっとの違いだが…無駄な処理は、無い方が良い…。
だって、ループする回数によってペナルティが増えていくんだもん…。
100回ループすれば、X100ペナルティ…。
10000回ならX10000…

と、言う事で、無限ループで「while(TRUE)」を使っているソースをみたら心の中で『クスクス』笑おう…。<性格悪!

ゆえに!「while(1)」と「for(;;)」は違うのだ!

えっへん!

…。

ふと、『最近のコンパイラは、頭が良い!』ともっぱらな噂だが…

リリース版でコンパイルすると…

もしかして結果が違うかも…

と言う事で…

恐る恐る確認…。

1:    void main( void )
2:    {
00401000   jmp         main (00401000)

こんだけ…。

見事な…完璧な…無限ループ。

意味無しコードは、気持ちが良いぐらいスッパリと全て削除…。

侮りがたし、コンパイラ…。

試しに、以下のソースをコンパイルしてみた…

void main( void )
{
    int    a = 0;
    for(;;)
    {
        a++;
        if(a>1000)
            break;
    }
    while(1)
    {
        a++;
        if(a>100000)
            break;
    }
}

結果…

1:    void main( void )
2:    {
00401000   mov         eax,3E9h
3:        int a = 0;
4:        for(;;)
5:        {
6:            a++;
7:            if(a>1000)
8:                break;
9:        }
10:       while(1)
11:       {
12:           a++;
00401005   inc         eax
13:           if(a>100000)
00401006   cmp         eax,186A0h
0040100B   jle         main+5 (00401005)
14:               break;
15:       }
16:   }
0040100D   ret

恐るべし…最適化…。

何も言う事はありません…。

ゴメンナサイ、マイクロソフト様、私が悪うございました…。

この様に最近のコンパイラは、素晴らしいのです!

って、ヨイショする以外無いでしょう的な結果でした…。

タイトルと違うやん!(T_T)

| | コメント (0) | トラックバック (0)

2005年12月25日 (日)

任天堂が純金トランプを発売?

とか思ったのは、早合点だった…。

任天堂オリジナルデザインの純金トランプ

三菱マテリアルが任天堂にトランプのデザインを依頼したようだ。

まあ任天堂は、元々花札やトランプ等のメーカーであるし…。

ちなみに三菱マテリアルは、
「三菱の金貨千両箱」
「阪神タイガース球団承認、2005セントラルリーグ優勝胴上げ純金カード」
「ゴールドカレンダー2006」
「三菱の純金鯱鉾(しゃちほこ)」
など…素晴らしい(奇抜な?)商品を開発・販売しています…。

だが!
三菱マテリアルは、分かっていない
なぜ!純金製NDSを作らせない!

任天堂の意味無いジャン…と思う…。

成金趣味バリバリで間違い無く来年一番のアイテムになるだろうにぃ~。

ずっしり重く携帯するだけで筋トレにもなるぞ!

まあ、ど~でも良いけど…。

だって金なんかに無縁のボケですから…。

| | コメント (0) | トラックバック (1)

2005年12月24日 (土)

バグが許されるプログラムって…?

「そんな物は、無いよ!」

と言われるに違いない…。

そりゃあ、バグが有ったらまずいよね…。

でも、結局取りきれず残ってしまうことがしばしば!

だとすれば、どんなバグが許されるか…?

東証システムの不具合が判明 大量誤発注取り消せず

「取り消」が機能しなくて400億ですよ…。

誤って入力したみずほ証券の発注者は、血が引く音を聞いたに違いない…。

無論取り消す方法を知っていたので
「数百万は、損害かぁ~。ボーナス無いだろうなぁ~。減棒幾だろうなぁ~。」
などと悲しい気分で取り消しを入力していたに違いない…。

で、エラーが返ってきた時、彼の頭の中では、天変地異が起きたに違いない…。
「そんなばかな!」
と思うと同時に秒針と共にカウントアップする脳内損害カウンター!

速攻で直接東京証券取引所に電話連絡し取引停止を依頼するが…。
東証に蹴られる!

担当者は、少なくとも10年寿命が縮み白髪になたのでは…?
何秒か心臓も止まったかもしれない…。

そしてこのニュースを見た富士通の担当SEは、茶碗を落とすのである…!

頭の中では、「あれってデバッグしたっけ?デッケー損害?」などがぐるぐる…。

「どうする俺!」
カードを見る
「減給・降格・クビ・メスメディア攻勢…」
あまり良いカードは無い…。

結局、許されるバグ・許されないバグの基準は、被害の規模だろう…と思う…。

システム障害引責で東証社長が辞任

進退は、考えていないとか言っていたけど結局辞任に…。
他にも専務・常務も辞任…。
当然当事者(システム関係者)も…クビ…でしょう。(と思う…。)

社長を辞任させたのだから…バグも本望だろう…かもしれん…。

そう言ったプログラマーは、大変だなぁ…。
でも、金も一杯貰っているんだろうなぁ~。

俺は、あんまり貰ってないけど…
ウン億の損害をもたらすバグも無いもん…。えっへん!(笑)

などど、漠然と思うボケでした。

| | コメント (0) | トラックバック (0)

2005年12月23日 (金)

祝!ケロロ軍曹!

ニフティのココログフォームの中に有ったので試しに変えてみた…。

無料だし…まあ、いいか…ぐらいの感覚で…変えました…。

…いや!変えたであります!(ちょっとなりきり…。)

そうしたらさ~、いきなり
「ケロロニュース!!」が付いてさ~
イベント情報&ケロロ軍曹公式サイトに
リンクしちゃってこりゃ便利!?

「ケロロ軍曹ラブ!リング」がさりげなく付いていてびっくり!

しかも「★アミーゴ★」なんて有って
もしかして…見てみたら
やっぱり「野ブタ。をプロデュース」の
「青春アミーゴ」だし…。

「めだかの日々」は、鹿児島の積雪の様子を
ムービーにしているし…。

その他の「ケロロ軍曹ラブ!リング」も徒然のままに
眺めてみよう…

と思うのであります!

| | コメント (2) | トラックバック (0)

2005年12月19日 (月)

こけたXBOX360…

「Xbox360」販売台数、初代の半分ペース

初代よりワースト記録を更新したのは、びっくり!

取り合えず、いちゲームユーザー(ライト)から言わせてもらえれば…

マイクロソフトは、今回もマーケティングを失敗した!

と思った…。(小声)

PS2とXBOXが、ほぼ同時に発売されたときには…

安いDVDプレイヤーとしてPS2を買った!
ゲームは、おまけ…。(なにせライトですから…。)

XBOXは、ダサくて邪魔でDVD再生も出来なくゲームの種類も無い…
PS2に対してのアドバンテージが何も無い!
のでやめた。

もし、XBOXがDVDが再生できPS2より小く安ければ間違い無く買った!
のに…。

商機を逃しましたよマイクロソフトさん…。

逆にPS2は、DVDプレーヤーで間違い無く販売に弾みが付いたと思う。

さらにPS2のDVDプレイヤーは、色々な所に波及した…。

映画をDVDで買うようになったし…。

ツタヤのレンタルでDVDが増えたし…。

PS2の功績は、間違い無くDVDの普及ですね…。

て、ゲームは…?

XBOXの功績は、PS2を安くしたこと!

だよね!?

| | コメント (0) | トラックバック (0)

2005年12月16日 (金)

書きこみは、自己責任?

最近ネット上の書き込みで社会的制裁を受ける事件が発生している…。

「冗談でやった」――Wikipediaへの偽投稿で謝罪

このほかにも

エイベックス殺害予告、別の殺害予告の容疑者が関与か
「オタ」「きもい」──スタッフのブログ発言、企業を巻き込む騒動に

仲間内なら冗談で済んだかもしれない…。

まあ、仲間内なら大抵の事は冗談で済む…。

でも、第三者が見たら?

というか、第三者が見れるような所にお茶目な事を書くなと言う事…。

特に良く参照される「Wikipedia」や「2ちゃんねる」に書くのは、洒落でしたでは済まない…。

まあ、書いてある事を読むと誹謗中傷ですねぇ…。

殺害予告に至っては…脅迫ですよぉ…。

ここだってググれるから変な事書くとヤバイと思うので気を使っているのですよ!

ホント…。(汗

これも、インターネットが子供からお年寄りまで手軽に使えるインフラになったからと言えるでしょう!

ゆえに「あなたは、登録されました!8万円振り込みなさい!」とブラウザに出ると焦る人が多いのだろう…。

素人から「どうしよう…。」と相談を受けた…。

「無視しなさい!」とは言っておいたが…

自分では、当てた事無いのに何で素人が当てる?

毎晩ネットサーフィンしているのに…

まだまだ修行が足りなのだと痛感…。(笑

| | コメント (0) | トラックバック (0)

2005年12月 9日 (金)

教える事は難しい…。

人に教える事は、とても難しい…。
ボケには、無理なので誰かに依頼したいものだ…。

教えるときの心がけ

こんな事を書ける人なら教えられるのかもしれない…。

実際プログラマーの知識や技術は、結構偏ったりする…。
取り合えず「プログラミング言語C ANSI規格準拠」を読もう…。

「なんか関数の呼び出しが変だよ…。引数が合わないよ…。」
とか言われて良く聞くとデフォルト引数を知らなかったとか…。
…とは言え自分も五十歩百歩…。

と言う訳でたまに読み返しますが…。
その時には、使い方が思い付かなかったものも
今読めば使い方が思いつく場合もあるし…。

またVC++のサンプルやダイレクトXのサンプルを
分解すると色々なノウハウを発見できるので
勉強の教材として適当かと…。

…勉強方法は、ともかく…。

知識や技術の是正するために…
一生懸命マニュアルなんぞ書いたときも有った…。

そんな偏りを是正する効果的な方法は、あるのかなぁ…
とか考えていたところにエクストリームプログラミングの記事を読んで衝撃を受けた。
(この当たり…ボケプログラマーさが出ているでしょうぅ…。)

プログラム品質・プロジェクト品質を安定させる手法…
本当にこんなこと出来るのか?とか…。

Xp-jp

特にペアプログラミングは、凄いやり方だ…。
分担するので無く文字通り一つのプログラムをペア(二人)で作成する…。
いろいろな意味で困難な問題山積だが…
実行することで得られることも多いと思われる…。

一人だと気が付かなくても、もう一人が気が付く可能性は高い。
例えば、銀行で金勘定は二人で行うそうだ。

大抵二人で作業を行うと作業を分担しがちだ…
だがそれでは、一人でやっているのと変わらない…。

最近、金融でコンピュータートラブルが伝えられるが
これもペアプログラミングで間違い・勘違いやミスを
減らせられると思われる。

でも、やっぱり実行するのは、難しいだろうな…。
少なくとも自分の所では…。

でもたまには、同僚の後ろでジット眺めてみるか…

てっ嫌がらせか?

| | コメント (0) | トラックバック (1)

2005年12月 8日 (木)

ONとOFFを繰りかえすフラグ

失敗した…。

ONとOFFを繰りかえすフラグの
処理としてこんなのを作ったが…。

BOOL    Flag    = FALSE;
void FlagChange( void )
{
    Flag    ^= TRUE;
}

基本的にこれでOKなのだが…
今回、たまたま

    Flag    = -1;

など、入れた奴がいたので
上記の処理が機能しなくなってしまった…。

多分よりベターな方法は
これだ!…と思う…。

void FlagChange( void )
{
    Flag    = !Flag;
}

しかし!

    Flag    = -1;

をやった奴は、もちろんバグなので
潰しておかなくてはならない!

念のためセーフティをつけるのなら
こんな感じ?

void FlagChange( void )
{
#ifdef _DEBUG
    if( ( unsigned )Flag > TRUE )
        MessageBox( GetActiveWindow( ), "FLAG VALUE ERROR!", "ERROR", MB_OK );
#endif

    Flag    = !Flag;
}

「BOOL」は、結局「int」なので
「unsigned」キャストで負の数を無くしておいて
チェックすると
    if( ( Flag < 0 ) || ( 1 < Flag ) )
と書かなくて済むし、比較も一回で済むし…。

ちょっと幸せになれるかも…。

| | コメント (0) | トラックバック (0)

« 2005年11月 | トップページ | 2006年1月 »