////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2004/01/05(Mon) No.238
    配信数： 2660 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００４年１月１日（木）の更新                */
http://www.kab-studio.biz/index.html

・あけましておめでとう！
　あけましておめでとうございます！
　新年の抱負とかはちょお普通な日記を見てね。
[ ちょお普通な日記 ]
http://www.kab-studio.biz/nikki2/index.html

・１月表紙壁紙！
　新年早々から暴走してます的なハオシャオの官能的な表紙壁紙です。ダウ
ンロードは CG Galleryにて。
　それに伴いトップページのデザインを新しくしました。前に戻ったって気
も（汗）。
　ちなみに１２月３１日公開バージョンとはちょっと違います。ジャギー抑
えました。影薄くしました。
[ CG Gallery ]
http://www.kab-studio.biz/CG/Gallery/index.html


////////////////////////////////////////////////////////////////////
/*                ２００４年１月５日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはー１話追加
　三人合体ホットハーブに７の６を追加。忘れ得ぬトラウマ……。
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.biz/nikki2/index.html

2003/12/21 (Sun)
　かぶヘッダーの準備。昼寝。来週はお休み。ほとはー自爆ネタ。ほとはー
もお休み。「劇場版」来る。プラネテスたばこネタ。今年を振り返る９月
１０月。プロジェクトの追い込み＆沖縄旅行ぽしゃる。このころから現プロ
ジェクトに入っていれば……。

2003/12/22 (Mon)
　客先でケンカの仲裁役。帰りに秋葉原へ……。 Fate ガイド本とか購入。
きららバックナンバーは見つからず。１１月１２月。ファイルのマージしか
してない。前半と後半の落差。でも今年一年悪くなかった。持ち込みとかす
るかな。そして帰省。

2003/12/23 (Tue)
　年賀状描き。午前中はぐだーっと。午後から休出。キャラベスト１０はし
ないです。そして雑誌バックナンバーの取り寄せ方。そしてクリスマス。

2003/12/24 (Wed)
　仕事が進まない。体調悪い。頭がぐるぐる回る。帰りに横浜へ。きららの
残り。そして専門学校より？　そして助けてやってください。

2003/12/25 (Thu)
　色々お仕事。でも２９日〜４日は休めそう。「面白い選択肢」を選んじゃ
った。明日は納会でピザを食べる。そして派遣の使われ方。

2003/12/26 (Fri)
　仕事の内容は変わらず。納会でピザかっぱらう。そして急遽増員。

2003/12/27 (Sat)
　午前中のんびり。午後から休出。７時から外注さんのお別れ会。かぶスタ
を知ってる人がいた……。ぴちぴちピッチは来週が楽しみ。

2003/12/28 (Sun)
　最悪の夢。午前中は洗濯とか。午後から休出。コーディングしてファイル
のマージして。終わらないので明日も仕事。やらなきゃいけないことがたく
さんある。Ｍ−１グランプリの笑い飯が面白い。そして掲示板で紹介。

2003/12/29 (Mon)
　午前中は大掃除。午後から休出。終わらず持ち帰り。それからまた部屋の
片づけ。やることストック。カレイドスターの第２クールを流し見ていい感
じ。ジャッキーチェンの映画の拳法って何？　外注さんありがとう。

2003/12/30 (Tue)
　午前３時まで部屋の片づけの続き。そのまま持ち帰ったお仕事。仮眠取り
つつ６時に完成。さらに部屋の片づけ。１０時に洗濯。郵便局で換金。１１
時に冬コミ。申込書セット３冊、合体用封筒１つ、こみパＯＶＡ１巻、Key
セット購入。船経由で帰宅。帰ってから夜７時まで寝る。ブラックジャック
スペシャル、それなり？　ソララドいい感じ。特に「一万の奇跡」が。

2003/12/31 (Wed)
　新表紙はハオシャオのあられもない姿。新しいトップページを組んで、本
格的に描き込み始めて、４時から１０時まで寝て。胸元と和服の塗りに助け
られる。昼１２時半に完成。えろい……。今日これからすること。 FTP は
断念。今回のイラストがいい感じで助かった。今年は色々始められて、来年
はさらにがんばる。副業的には辞める方向に。応援ありがとう！

2004/01/01 (Thu)
（お正月休みのため休載）

2004/01/02 (Fri)
（お正月休みのため休載）

2004/01/03 (Sat)
　３１日はポストカード描いてタイマーセットしてリブレットとかの準備し
て実家へ。１日目、おみくじは末吉。アットホームな牛角。２日目、ぷらと
わ書き。３日目、チルトホイールとエアパッキン封筒。テレビはぴちぴち
ピッチ、曙ＶＳサップ、こみパレボ、ミリオネア、箱根駅伝。これからやる
こと。もう休みないかも……。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第九章　四人　−１５−

　兵士達の後ろに鷹人が見える。それを注視せず、脇に回り込むようにして
、銃口から体を逸らす。銃弾が脇をかすめる。狙いはそれほど正確ではない
と判断して、できる限り後退しないようにする。あと少し、あと少し……。
　そして鷹人が追いつく。
　瞬時に兵士３人が斬り落とされる。背後からの攻撃に兵士達は振り向く。
「うぉおおお！！」
　吠え声を上げて雅樹は突っ込む。その声に反応して再び振り向く兵士達。
『蒼き炎よ！』
　頭上から振り落ちる蒼炎が兵士の頭部を消し飛ばす。それでも引き金を引
くが、狙いは外れていた。
　雅樹が刀を薙ぐ。
　密集した兵士達は、前後からの挟撃に右往左往する。雅樹と鷹人が全く躊
躇することなく刀を振るう。互いの切っ先は決して触れることなく、だが独
立することもなく互いの存在を活用して斬り倒していく。
　倒している、はずだった。
　兵士の肩を薙いで次の兵士へと向かい、斬り上げようとする。が。
「……？」
　反射的に脇へと躱し、そこを銃弾が過ぎて、今斬り上げようとした兵士へ
と当たる。先に斬った兵士の肩口にには明らかに傷があった、が、それはも
はや軽傷に過ぎない。
「か、回復……」
　周りを見回す。すでに斬り倒した兵士達が、起きあがっている。
　雅樹は、呆然となった。
「足を止めるな！！！」
　鷹人が雅樹の前を遮る。
　銃弾が、命中した。
「たかとぉ！！！」
　穂香の声が、聞こえた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『……もうあきらめた……』
「ごめん……」
『まぁ、ってことは今年はもうほとはー一筋？』
「ということになるだろうね」
『具体的な計画は？』
「本編は当然毎週更新」
『外伝は？』
「夏コミに２を」
『他には？』
「本編を印刷したの、っていう計画もあるみたいだけど」
『……それって売れるの？』
「需要はあるみたいだけど……」
『うーん……』
http://www.kab-studio.biz/index.html
_______________________________________________________________[KCM]

////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 13.02
アルゴリズム関数の基本

「これからアルゴリズムの関数を作っていくわけだけど、その前にまず基本
的なことから説明します」
『基本的なこと？』
「アルゴリズム関数はこうなってる方がいい、っていうのをまず最初に上げ
ておこうと思って。大まかに上げると、アルゴリズム関数は次のような性質
を持っているべきです」

・関数になっている。
・関数の中で閉じている。
・入力と出力、エラーが明確になっている。

『んー、最初の〈関数になっている〉、って当たり前じゃない』
「まぁそうなんだけど一応。とりあえず、クラスひとつにつき１アルゴリズ
ム、っていうのはあまりないから、ってこと」
『クラスひとつにつきいっぱいアルゴリズムがある、っていうのはＯＫ？』
「それはＯＫ、というかアルゴリズムの関数が、ただクラスの中に入ってる
ってだけだから。アルゴリズム関数とクラスが密接に関係してなければ
ＯＫ」
『うーん、いまいちよくわからない……』
「その辺はもう少し先かな。次の〈関数の中で閉じている〉は、関数の外の
変数と関わらない、ってこと」
『外の変数？』
「具体的に言うとグローバル変数のこと。アルゴリズム関数がクラスのメン
バ関数の時には、メンバ変数も当てはまるかな」
『ってことは、引数で渡される変数以外、ってことだよね』
「そういうこと。これはなぜかというと、関数を呼ぶ度に結果が変わる可能
性があるから」
『どゆこと？』
「次の項目とかぶるけど、アルゴリズムは〈Ａを入力したらＢが返る〉って
いうのが明確に決まっていて、１００回やったら１００回同じ結果が返って
くる必要があります」
『うんうん』
「でも、外の変数にアクセスしてると、その変数の状態で結果が変わる可能
性が出てきます」
『んー、その外の変数も〈入力〉なんじゃないの？』
「だったらちゃんと引数として入力してもらうべき、ってことだね」
『そか、入力と出力、があるわけだから、それ以外の要素は関係しないよう
にしなきゃいけないわけだ』
「同じ関係で、外的要因が関係してくるものはアルゴリズムに入れないよう
にします」
『外的要因？』
「たとえばファイル操作とか」
『あー、ファイルがあったりなかったりで変化しちゃうね』
「もちろんそういった情報も入力に加えれば問題なし」
『でもどっちにしろ、ファイル操作そのものは中に入らなそうだね』
「だね。最後の〈入力と出力、エラーが明確になっている〉は一番大事」
『さっきの〈Ａを入力したらＢが返る〉ってのだね』
「何度呼んでも同じ結果が返る、っていうのが重要」
『エラーっていうのは？』
「エラーというよりは〈範囲〉かな」
『範囲？』
「ここからは例を見ながらの方がいいかな。たとえば、次のような関数を作
るとします」

・入力：整数１ 
・出力：整数１ * 10 

『つまり１０倍して返す、ってことね』
「これを、単純に関数化してみます」

int TenTimes( int p_i )
{
    return p_i * 10;
}

『簡単ねー』
「でも、実はこれだけでは不十分です」
『え？』
「 int に入る一番大きな数は？」
『えっと…… 2147483647 でーす』
「ってことは？」
『ってことはぁ……あ、戻り値も 2147483647 までだから、引数はその
１０分の１の 214748364 までしかダメってこと？』
「正の整数に限れば、そういうこと」

void UseTenTimes_Overflow()
{
    int iRes;
    iRes = TenTimes( 214748365 );
    TRACE( "%d\n", iRes );
    // -2147483646
}

『げ、マイナスになっちゃった』
「これは Version 6.14 ( No.114 ) でやった【オーバーフロー】が起きた
から」
『範囲を超えちゃったのね』
「もちろん負の方もあるんだけどそれは説明の関係で置いておいて、じゃあ
この場合、関数を作る側はどうすればいいのかというと、次のような選択肢
があります」

１：コメントに 214748364 までしか受け取れないことを書いておく。
２：214748364 より大きな数が渡されたら 1 を返す。
３：214748364 より大きな数が渡されたら assert() する。

『……１って、何もしないのと同じじゃない』
「そう。でも、実はこれってすごく重要なんです」
『どゆこと？』
「さっき、アルゴリズム関数は入力と出力がはっきりしてないといけない、
って言ったよね」
『うん』
「でも、それは結局、ソースコードを読んで調べないといけないんです」
『でもそれって大変だよね、ランタイムなんて読み切れないもん』
「そうなるとコメントやドキュメントを信じるしかなくなるでしょ。だから
１はちゃんと機能するんです。〈この関数は引数を１０倍して返します〉と
〈214748364 までしか受け取れません〉っていうのは同じ、ってこと」
『ん……関数がどう動作するかは、ドキュメントを信じてその通りに操作す
るしかないわけね』
「そういうこと。プログラムは関数やクラスの集まり。その実装までは追い
切れないなら、〈信用〉だけで組むしかないわけ」
『……それって怖くない？』
「怖いよ。だから、できる限りプログラムの側で〈信用〉を〈保証〉する必
要があります。その方法のひとつが２」
『 1 を返す……なんで 1 ？』
「 1 の１０分の１は 0.1 、でもこれは引数で渡せないから」
『 int だから……そか、 1 は絶対に返らない数なんだ』
「こういう形でエラーを返すのが、２の方法。この関数を呼び出す側では、
このエラーをチェックすることで関数がちゃんと動作したのか確認すること
ができます」
『でもチェックは必要なのね』
「そうなるね。今回のエラーは、引数でちゃんと 214748364 以下ってこと
をチェックすれば問題にはならないから、そういう意味ではこの方法はあま
り意味はないかな」

void UseTenTimes_WithCheck()
{
    int iInput = 214748365;
    int iRes;

    // iInput の中身をチェックします。
    // 注！　実際には最小値もチェックする必要あります。
    if( iInput <= 214748364 )
    {
        iRes = TenTimes( iInput );
        TRACE( "%d\n", iRes );
        // 2147483640
    }
    else
    {
        TRACE( "%s:%d\n", "エラー！", iInput );
    }
}

『呼ぶ前にチェックする、と』
「でも、この場合はチェックができるっていうだけで、複雑な処理をする関
数の場合には事前のチェックは不可能だから」
『エラーを返すしかないわけね』
「ここで重要なのは、どの線で切り分けるか。たとえば、２ assert() を使
う場合を考えてみます」

#include <assert.h>

int TenTimes_WithAssert( int p_i )
{
    assert( p_i <= 214748364 );
    return p_i * 10;
}

『 assert() は Version 6.17 ( No.117 ) でやった……あれ？　大文字小
文字違う』
「それは MFC の ASSERT マクロ。こっちの assert() はランタイムの。で
も同じ機能だからどっちでもいいよ」
『ってことは、中が 0 だとダイアログ出るんだね』
「そう。使用例はこんな感じ」

void UseTenTimes_WithAssert()
{
    int iInput = 214748365;
    int iRes;

    iRes = TenTimes_WithAssert( iInput );
    TRACE( "%d\n", iRes );
}

『出た出た、 Assertion failed! って』
「つまり、この場合には必ず呼ぶ前にチェックが必要、ってこと」
『必ず？』
「必ず。 ASSERT の説明の時にしたけど、 assert() はエラーチェックじゃ
ないから。 assert() はプログラム上絶対に通らない経路、通らない値の時
にひっかかるようにするためのもの」
『ってことは、 TenTimes_WithAssert() に渡されるのは絶対に assert() 
にひっかからない数じゃなきゃいけない、と』
「そういうこと」
『んー、で、どっちがいいの？』
「というより組み合わせるのが普通かな。さっき言ったように、複雑な処理
の場合にはすべて事前にチェックさせるのは不可能、だけど簡単なチェック
なら呼ぶ前にさせる形の方がいいから」
『そう？　全部エラーの方が楽だけど』
「そうでもないよ。エラーが返ってくる場合、エラーのチェックは必要にな
るし」
『そか、労力は同じか』
「それに、呼ぶ前のチェックは、複数の関数を呼ぶときにまとめてできたり
するから」
『同じ引数を使い回す時、ってこと？』
「そういうこと。ま、明確なルールは決まってないから、微妙なところだけ
どね」

/*
    Preview Next Story!
*/
『なんかちょっと微妙……』
「ルール決まってないからね。でも、次回はもう少し絞り込んでみるから」
『絞り込む？』
「ルールが決まってるところはしっかり決めた方がわかりやすいでしょ」
『ってゆーかプログラム組めないと思う』
「というわけで次回」
＜ Version 13.03 「コントラクト」という考え方 ＞
『につづく！』
「ま、それでも組まなきゃいけないときはあるんだけどね」
『え”』


////////////////////////////////////////////////////////////////////
/*                ２００４年１月１２日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはー１話追加予定
　三人合体ホットハーブに７の７を追加予定。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

