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

    KAB-studio.h


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

    送信日： 2004/07/12(Mon) No.265
    配信数： 2080
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

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

・表紙リニューアル完了！
　表紙リニューアルが完了しました！
　……と言ってもあんまり変わってませんが（汗）。結局、下にスクロール
しないと更新状態が読めないレイアウトになってしまいました。ごめんなさ
い。会社で見る時にはちゃちゃっとスクロールしてしまえばいいので便利か
も（爆）。
[ 表紙 ]
http://www.kab-studio.biz/index.html

・表紙壁紙リリース！
　お待たせしました、表紙イラストの壁紙バージョンを公開しました！　貴
方のデスクトップに水着姿のハオシャオが！（爆）
　ダウンロードは CG Gallery にて。大きいサイズも置いてあります。
[ CG Gallery ]
http://www.kab-studio.biz/CG/Gallery/index.html#KAB_studio_200407_1024

・ほとはー８の１０追加！
　２週間ぶり、三人合体ホットハーブに「８の１０ 深窓の美少女」を追加！
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html


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

2004/07/04 (Sun)
　表紙壁紙！！！　水着姿のハオシャオです。すごくいいできです。恒例の
制作解説。マリみて春。そして転職アドバイザー。

2004/07/05 (Mon)
　普通におしごと。７月も余裕ありそう？　川崎のヨドバシで USB 接続の 
LAN アダプタ購入。グランドマンボウソファが明日来る。表紙壁紙、やっぱ
いいよなぁ……。そして SE 病。

2004/07/06 (Tue)
　バグ増える。グランドマンボウソファ到着！　でかい……。肘掛けとかが
平らにならない。久しぶりに修羅の刻がまぁまぁ。そしてトップ絵重すぎ。

2004/07/07 (Wed)
　１０時半までおしごと。スケジュールがタイトだ……。お伽草子いまい
ち。アクションが……。そしてぉわっ！　そして MONSTER 。

2004/07/08 (Thu)
　仕様変更矛盾ありまくり、仕様通りがバグ、仕様対応チェック……。全体
量がかなりに。きららどこにもない。ギャラクシーエンジェル第３シーズン
がはっちゃけてます。そして「やつれたね」。

2004/07/09 (Fri)
　徹ゲーしてきました。バグ＆仕様変更はかなり潰したけど、大きいのが
残ってる……。ミーティングが中止になって徹ゲーでテニス。そして 
VB.NET 開発。重い……。

2004/07/10 (Sat)
　あれから寝て１２時半に起きて休出。なんか増えてるし。ちょっとだけ残
して９時上がり。休出がいい気分転換に。


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

■　第十章　剣と魔法　−１４−

　紺色の浴衣を着たリシュネを間近で見て、舞はその頬をつついた。上気し
て赤らんだ頬は、音を立てそうなほど柔らかくたわんだ。
「？」
　リシュネが振り向き、湯気が揺らめく。潤んだ肌と瞳、端正な顔立ち、艶
のある金髪、女性の舞から見ても、リシュネはきれいだと思えてしまう。
「あ、ううん……そう、前に、病院でさ、剣で腕を切ったじゃない、あのと
き、リシュネの肌って硬いのかなって思って」
「……それを確かめるために一緒に入ろうとしてたの？」
　リシュネはジト目で舞を睨む。舞は最後の最後まで入りたいと主張してい
たが、残念、小さな風呂にふたり入ることは物理的に不可能だった。
「別にそれだけっていうわけじゃないけど」
「ふぅん……私の体は、自由に硬質化できるから」
　先ほどつついた箇所を、リシュネが指し示す。舞が再び触れれば、それは
金属のように
「硬い……」
　色もわずかに変色し、白みがかっている。かといって本当に金属のような
無機質さを見せているわけではなく、
「爪、みたい」
「もっと硬い」
「うん、わかってる」
　昼のことを思い出す。あの高さから裸足で地面に降りても全く傷つかな
い。
　私とは、違う。
「こんなこと言ったら怒るかもしれないけど」
「？」
「ＡＰって、便利だよね」
　……。
　無神経なのか、そうではないのか。
「舞って……」
　面白い、不思議、少し違う、ううん、そうじゃなくて……そう。
「舞って、変」
「う”っ」
                                                              (続く)


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

　Version 13.29
日時の変更

「日時編の最後は、日時の変更方法について説明します」
『日時の変更……それってつまり、コンピューターの、ってことだよね』
「そういうこと。なぜ日時の変更方法について説明するかというと、テスト
プログラムで必要になるから」
『テストプログラム？』
「たとえば〈今月の月末を取得する関数〉のテストをしたい場合とか」
『あ……テストする日付によって、月末って違っちゃうもんね』
「ちゃんとテストする場合には、最低１２ヶ月＋うるう年の場合のテストが
必要になります。こういった場合にはテストプログラムを作った方が楽なん
だけど」
『そのためには日時をプログラムで変られなきゃいけない』
「そういうこと。実際のテストプログラムでは」

1.現在日時を取得して、取っておく。
2.目的の日時に変更する。
3.テストする。
4.元の日時に戻す。

「というパターンになります」
『でも……これだと、 1 から 4 になるまでの間に時間が進んじゃわな
い？』
「うん、だからこれは厳密にはちゃんと戻すことはできないんです。もっと
厳密にするのなら、 1 から 4 までの秒数を数えてそれを加える、っていう
こともできるけど」
『それはそれで大変ね……』
「それ自体も本当の意味では厳密じゃないしね。ま、今回は手っ取り早く、
現在日時を変更する方法を紹介します」
『はーい』
「さて、まず現在日時の取得方法について。前にファイル入出力の時にも説
明したけど、ウィンドウズの機能を使用する場合には API を使う必要があ
ります」
『ファイル入出力……あ、あのときはランタイム使ってても結局は API 
使ってるんだったよね。それと同じで、 time() とかも実は API 使って
る？』
「そういうこと。まず、現在日時を取得する場合には GetLocalTime() とい
う API を使用します」

void Use_GetLocalTime()
{
    SYSTEMTIME stSystemTime;
    GetLocalTime( &stSystemTime );

    TRACE
        ( "%d年%d月%d日%d曜日%d時%d分%d秒（%dミリ秒）\n"
        , stSystemTime.wYear
        , stSystemTime.wMonth
        , stSystemTime.wDay
        , stSystemTime.wDayOfWeek
        , stSystemTime.wHour
        , stSystemTime.wMinute
        , stSystemTime.wSecond
        , stSystemTime.wMilliseconds
        );
    // 2004年6月23日3曜日13時2分55秒（250ミリ秒）
}

「なんか localtime() に似てるね」
「現在日時を取得する機能もあるから、 time() と localtime() が組み合
わさったようなものかな」
『なるほど』
「ただ、 localtime() とは結構違うから注意した方がいいかも」

・西暦が４桁。
・月が 1 - 12 。
・「ミリ秒」がある。

『月が 1 から……ややこしい』
「って思うのようになるっていうのもちょっとアレだけど」
『う”』
「それと、あまり使わないと思うけど【ミリ秒】があるから」
『本当に使わなさそう……』
「まぁ、どちらかというとこの API 自体、そもそも使わないかも」
『使い道ないの？』
「日時関係はランタイムの方が便利だからね。 API には mktime() に当た
る関数がないから」
『のべ秒に変換できない……』
「そういうこと。プログラムではのべ秒と各桁に分けてあるのをそれぞれ使
い分けるから、それがしにくい GetLocalTime() は使う必要ないかな」
『むー』
「それより重要なのは、現在日時を変える方」
『対になってるんなら、 SetLocalTime() って API ？』
「そういうこと」

void Use_SetLocalTime()
{
    SYSTEMTIME stSystemTime;
    GetLocalTime( &stSystemTime );

    TRACE
        ( "%d年%d月%d日%d曜日%d時%d分%d秒（%dミリ秒）\n"
        , stSystemTime.wYear
        , stSystemTime.wMonth
        , stSystemTime.wDay
        , stSystemTime.wDayOfWeek
        , stSystemTime.wHour
        , stSystemTime.wMinute
        , stSystemTime.wSecond
        , stSystemTime.wMilliseconds
        );
    // 2004年6月24日4曜日12時41分14秒（950ミリ秒）

    // １年進めます。
    stSystemTime.wYear += 1;

    TRACE
        ( "%d年%d月%d日%d曜日%d時%d分%d秒（%dミリ秒）\n"
        , stSystemTime.wYear
        , stSystemTime.wMonth
        , stSystemTime.wDay
        , stSystemTime.wDayOfWeek
        , stSystemTime.wHour
        , stSystemTime.wMinute
        , stSystemTime.wSecond
        , stSystemTime.wMilliseconds
        );
    // 2005年6月24日4曜日12時41分14秒（950ミリ秒）

    SetLocalTime( &stSystemTime );
}

「 API の SetLocalTime() で、ウィンドウズの日時を変更できます」
『渡すのは SetLocalTime() と同じ SYSTEMTIME なんだ』
「だから GetLocalTime() で取ってきたものを少し変えて SetLocalTime() 
に渡すのが楽かな」
『べたべたに作りたいときは、べたべたにセットしなきゃダメ？』
「そうだね。のべ秒から作りたいときのために、 tm 構造体からコピーする
関数とか用意しておくといいかもね」
『んー、この前のブロック選択とか使えば楽勝っぽいね』
「でも年と月は間違えないように気を付けてね」
『あ”』
「間違えそうだったね……年は 1900 、月は 1 を足さなきゃいけないんだ
からね。曜日の SYSTEMTIME::wDayOfWeek はセットしなくてもＯＫ」
『これは無視されるんだね、ランタイムと同じで』
「ちゃんとリファレンスに書いてあるから大丈夫。 API ってソースがない
から、こういうふうにちゃんと書いてないとわからないかな」
『あ！　質問！』
「はい火美ちゃん」
『さっきと日付が違う！』
「そんなことは気にしなくていいです！」
『じゃあちゃんとした質問。テストするときって、これで変えたあとテスト
して、また元に戻すんだよね』
「そうなるね。そのためにも、 GetLocalTime() で取得した現在日時は取っ
ておいて、任意の日付に変えてテストした後、取っておいた日時で元に戻
す、っていう形になるかな」
『変え忘れたら？』
「ウィンドウズの日時が変えたままになる……」
『……って、それってどのくらい困る？』
「日時を変更してプログラムの修正はしない方がいいかな。ファイルが古い
か新しいかで〈更新されたか〉を判定してるから、場合によっては〈常に
リビルド〉みたいな状態になっちゃいます」
『げ、かなり迷惑！』
「それ以外にもログを取ってたりするときの日時が違ったりするかな。他に
は……ビデオのタイマー録画とかずれるかも」
『それは色々イタイね……』
「そういうのを防ぐためにも、デストラクタで対処する、っていうのがひと
つの方法かな」
『デストラクタって、 Version 11.11 ( No.211 ) でやった、クラスがなく
なるときに呼ばれる関数だよね』
「そう。 SYSTEMTIME をメンバ変数に持っておいて、コンストラクタで現在
日時を取得、デストラクタで 現在日時を元に戻す、ってすれば」
『自動的に元に戻る！』
「まぁそれでもデバッグ実行して途中で止めたり assert したりするとダメ
なんだけど」
『あらら』
「それでもそういう方法はあるってことで。実際に作るとこんな感じかな」

class CTimeReseter
{
private:
    SYSTEMTIME m_stSystemTime;

public:
    CTimeReseter()
    {
        GetLocalTime( &m_stSystemTime );
    }

    ~CTimeReseter()
    {
        SetLocalTime( &m_stSystemTime );
    }
};

『コンストラクタで取得して、デストラクタでセット、ね』
「使用例はこんな感じ」

void Use_CTimeReseter()
{
    CTimeReseter cTimeReseter;

    // ここで任意の日時に変更します。
    // そしてテストをします。

    // この関数を抜けるとデストラクタが呼ばれて
    // 自動的に日時が戻ります。
}

『戻さなくていいっていうのが便利よねー』

/*
    Preview Next Story!
*/
「さて、今回で日時編は終了です」
『次のアルゴリズムは？』
「もうありません」
『え”？』
「ソートと日時を見ればだいたいはできるようになるから」
『というわけで次回』
＜ Version 13.30 計算量と時間 ＞
「につづく！」
『うわ、なんか難しそうなのが出てるっ！！』
「うん、ちょっと難しいかも」
『げ！』


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

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


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
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
*/
////////////////////////////////////////////////////////////////////

