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

    KAB-studio.h


    (C)KAB-studio 1999 - 2002 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

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

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

・KAB-studio.h 縮刷版更新
　KAB-studio.h が１４０号になるので縮刷版を更新します。縮刷版のダウ
ンロードはダウンロードルームにて。
[ ダウンロードルーム ]
http://www.kab-studio.com/Freeware/index.html#MailMagazine

・作者についてを更新
　１月１３日はわての誕生日、というわけで作者についてをちょっとだけ更
新。
[ 作者について ]
http://www.kab-studio.com/Info/Kaburaya/


////////////////////////////////////////////////////////////////////
/*                        チョー普通な日記                        */
http://www.kab-studio.com/nikki2/

2002/01/06 (Sun)
　カレー作りにフードプロセッサー大活躍。ハイブリッドデッキ、壊れたか
も……。ぷらとわ書いて疲れる。利家とまつはなんか普通だ……。そして
ユーロ。年を越えた時にってのは辛そう。これから毎日９時まで残業？

2002/01/07 (Mon)
　AirH" が継ながらない〜。ぷららのせい？　お仕事は結構調子いいかも。
ヒット数がかなり増？

2002/01/08 (Tue)
　LCD-iMac 見たい〜。お仕事は客先＆プログラミング。結構好調？　でも
疲れた〜。<BR>

2002/01/09 (Wed)
　無茶苦茶眠くて仕事にならなかった……。１日無駄にしたなぁ。新しい
iMac はかなりいい感じ。でもそれより新しいミノルタのデジカメが良さそ
う。アニメはフルメタル・パニック！がいい感じ。ヒット数は辞書が多いで
す。表紙よりも。

2002/01/10 (Thu)
　今日は調子良かったんでお仕事も結構。でもはかどらなかったかも？　こ
こ数ヶ月でプログラミングのスタイルが大きく変わったり。そしてリロード
マニア。謎だ。

2002/01/11 (Fri)
　やっとメンテツールＢが完成。スケジュール的に遅いけど。 MFC って結
構扱い辛いかも。 GUI もプログラムで作った方がいいのかなぁ。横浜へ行
くもリブレットは買わず。 AirH" 大人気？　おねがい☆ティーチャー最
高っす！　ツボだなぁ。

2002/01/12 (Sat)
　土曜なのに忙しい。洗濯して休出して５時間半仕事して銀だこ食べてサイ
ト回ってぷらとわ書いて。アニメはおねがい☆ティーチャーがいいね＜それ
昨日書いた。そしてトップページの狙い。カッコイイってうれしい〜。


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

■　第三章　きもち　−３−

　朝九時半。そのジープは市街地を抜けて一本の長い道路へと入る。駅があ
り通学通勤途中の人々が群れるその向こうに、人気のない空間がある。鉄条
網で周りを囲っている林と、高く灰色い壁とに挟まれた道は、カーキ色の威
圧的なジープ以外には車両を見かけることはない。脇には歩道と呼べるよう
なものはなく、まさに、人の立ち入ってはならない場所を感じさせる。
　その一本道を果てしなく走り続けると、塀の一端が途切れる場所がある。
ジープはほんの少しだけ減速し、そこへと入る。
　黄色と黒の遮断機が降りているのを見て、目が細く髪の短い骨張った顔の
男は、露骨に不快な顔つきでブレーキを踏んだ。
「はい、パスお願いしまーす」
　と、前髪を金色に染めた青年は明るく楽しそうに手を差し出した。
「君……」
「はい？」
　笑顔と沈黙。
　さらに、笑顔と沈黙。
　とどめに、笑顔と沈黙。
「……初めてかい？」
「え、ええ」
　青年は「早くパス渡してくれよー」と思いながら、作り笑いを続けた。
「君は規則というもの……」
　男は作り笑いを引き続き維持して、沈黙を造り出した。
「そう……」
　その間、じっと青年の目を見続ける。青年は完全に気圧されながら、苦笑
いを保っていた。
　その光景を見かけたひとりが全速力で駆け寄り、ジープの横で頭を下げて
叫んだ。
「辻様おはようございます！」
「ん、おはよう」
　「辻」と呼ばれた男が笑顔を向ける相手を変えたことを確認してから、下
げていた頭を上げ、見張り所へと登って青年を殴ったあとスイッチを叩い
た。
「ありがとう」
　満面の笑みをたたえてそう応えた。そして、遮断機が上がりきらない内に
ジープは砂埃を上げてその場を去った。１秒後には建物の影でタイヤを鳴ら
していた。
　男はがらがらの駐車場の中央にジープを止め、さっそうと歩いていく。そ
の敷地内は、灰色い壁をした建物が軒を連ねていた。清潔感はあるが、冷た
く、静かな雰囲気が辺りを占めていた。男が挨拶をするような相手すらいな
かった。
　男は建物のひとつに入る。中には最新式の設備がうなりを上げていたが、
それを見守る人間はいなかった。階段を上り、ひとつ上の階からその広々と
した「工場」を見回す。
　そこは「倫理の掃き溜め」とでも言えるような場所だった。床に固定され
た機械から巨大な透明カプセルが出ている。その中に満たされた黄色い液
体。そして、その海の中で静かに眠る、奇妙な形をした生物達。
　カプセルはその建物の中だけでも１０を超えていた。中には形自体はまと
もなもの――巨大な虎や狼など――もあったが、そのほとんどは異形の生物
だった。
　男は、それらの「子供達」を見下ろして、満面の笑みを浮かべた。カプセ
ル群を見下ろしながら、男は渡り廊下の先、ドアの前へと来て、ノックをし
た。
「入りたまえ」
　そう返事を受ける前に、すでに男は中へと入っていた。

                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『次の水曜は Java メルマガの出る日じゃない？』
「そう、〈第１０回  クラスとインターフェイスの違い〉が発行されます」
『……なんかソバとかうどんとかいっぱい出てくるね……』
「たとえ話だけどね」
『これ自体は分かるけど、これってプログラミングに関係あるの？』
「もちろん。たとえば、 HPEN と HBRUSH は別物だよね」
『そりゃそうよ、ペンとブラシは別物だもの』
「そう、それ」
『？』
「現実世界でペンとブラシは別物、だからプログラミングでもそう」
『現実世界のルールが、プログラミングに使われてる？』
「その方が分かりやすいからね。それを分かってもらうための」
『ソバとうどん、ね』
http://www.kab-studio.com/Programing/JavaOOP/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 7.20
時間あれこれ

「今回はちょっと横道にそれて、時間関係の話」
『ランダム使わないのー？』
「それは次回ね。それに、時計関係はよく使うことなんだけど、分かりにく
いからちゃんとやっといた方がいいよ」
『確かにそうよねー、今の時間とかを出せって言われても難しいかも』
「というわけで見ていきましょう。まずは何を使うか。ランタイム、 
API 、 MFC のどれでも時間は取得できます」
『この前はランタイムの time() を使ったんだよね』
「そう。まずはこのランタイムを使う方法から見てみようか」

void CAnimeDlg::OnBDraw() 
{
    // まずは「のべ秒」を取得。
    time_t lTime_t;
    time( &lTime_t );

    // 次にローカル時間に変換します。
    tm *pstTm;
    pstTm = localtime( &lTime_t );

    // そしたら出力。
    TRACE
        ( "%d年%d月%d日%d曜日%d時%d分%d秒\n"
        , pstTm->tm_year
        , pstTm->tm_mon
        , pstTm->tm_mday
        , pstTm->tm_wday
        , pstTm->tm_hour
        , pstTm->tm_min
        , pstTm->tm_sec
        );
    // 101年11月22日6曜日19時38分38秒

    // 下のは前の。
    ::KillTimer( GetSafeHwnd(), 100 );
}

『最初の time() は前回の〈現在時刻のべ秒〉ね』
「そう、時間の取得はこの値を取得するところから始まります。次に、これ
を〈ローカル時間〉に変換します」
『ろーかるじかん？』
「全部日本語に訳すなら【地域時間】かな」
『田舎のテレビとかローカル放送って言うのと同じ？』
「そうそう、それと同じ。テレビなんかと同じに、時間って国によって違う
でしょ」
『アメリカとか東の端と西の端でも違うよね』
「実は、最初に time() で取得したのべ秒は【グリニッジ標準時】っていう
世界基準になってる時間なんです」
『確かイギリスのだよね』
「だから日本の時間じゃないわけ。日本とか、アメリカの東海岸とか、そう
いう【地域】、つまりローカルな時間に変換してくれるのが localtime() 
ってランタイム」
『便利ねー。で、この関数の……』
「戻り値に tm 構造体のポインタが返ってきます。この構造体の中のメンバ
変数に、年とか時間とかが入ってます」
『それを TRACE() で表示してるわけね。でも……なんか値が変！』
「まず年が変だよね。これは、 tm::tm_year には実際の年から 1900 を引
いた値が入ってるから」
『げ、じゃあ 1900 を足さなきゃいけないの？　めんどくさー』
「まぁそういうことになるかな……」
『それに、月が 1 少ないし、曜日なんて無茶苦茶変だし！　なんかかなり
変だよー』
「月は 0 が１月に当たるから。曜日も、日曜日が 0 、月曜日が 1 ってい
うふうに割り当てられてるから」
『これもかなりめんどい……』
「というわけで、これを便利に変換するランタイムを使いましょう」
『げ、そういうのあるなら先に言ってよ！』

void CAnimeDlg::OnBDraw() 
{
    // まずは「のべ秒」を取得。
    time_t lTime_t;
    time( &lTime_t );

    // 次にローカル時間に変換します。
    tm *pstTm;
    pstTm = localtime( &lTime_t );

    // そして文字列に変換。
    char pchDate[128];
    strftime
        ( pchDate
        , 128
        , "%Y年%m月%d日%A%p%I時%M分%S秒"
        , pstTm 
        );

    // そしたら出力。
    TRACE( "%s\n", pchDate );
    // 2001年12月22日SaturdayPM08時02分18秒

    // 下のは前の。
    ::KillTimer( GetSafeHwnd(), 100 );
}

『 strftime() ってのがそう？』
「そう、このランタイムで tm 構造体に入ってる日時を自動的に変換してく
れるんです」
『なんか TRACE() とか sprintf() に似てるね。 TRACE() よりも便利か
も。あ、でもなんか表示がやっぱ変……』
「曜日と午前午後がねー、英語になっちゃうんだよね」
『それに時間、 0 が邪魔！』
「あ、これは」

    strftime
        ( pchDate
        , 128
        , "%#Y年%#m月%#d日%A%p%#I時%#M分%#S秒"
        , pstTm 
        );

「って感じに # を入れれば、自動的に 0 を取ってくれるから」
『おー。でもやっぱ曜日とかがねー』
「じゃ、一番便利なのを紹介しようか」

void CAnimeDlg::OnBDraw() 
{
    char pchDate[128];
    // まず日付を取得。
    GetDateFormat
        ( LOCALE_SYSTEM_DEFAULT
        , 0
        , NULL
        , NULL
        , pchDate
        , 127
        );
    // 日付だけ出力。
    TRACE( "%s", pchDate );
    // 次に時間を取得。
    GetTimeFormat
        ( LOCALE_SYSTEM_DEFAULT
        , 0
        , NULL
        , NULL
        , pchDate
        , 127
        );
    // 時間を出力。
    TRACE( "%s\n", pchDate );
    // 2001/12/22 (土)午後 8:45:27

    // 下のは前の。
    ::KillTimer( GetSafeHwnd(), 100 );
}

『おおっ、これは綺麗じゃなーい』
「これまではずっとランタイムを使ってたけど、今度は API 」
『 GetDateFormat() と GetTimeFormat() ね』
「ウィンドウズのコントロールパネルに【地域】ってあるでしょ。そのダイ
アログの【時刻】と【日付】のページで指定した通りに表示されるから」
『ホントだ！　こっちを変えると表示も変わる！　すごーい！　でも、なん
でこれ先に教えてくんなかったの？』
「いや、だって前回の srand() には使えないし」
『あ、そっか……』
「それに、ランタイムの方にもメリットが結構あるから。 API はウィンド
ウズ専用だけど、ランタイムは他の OS でも使えるから」
『そんな先のこと言われても……』
「まーね。でもそういう違いを気にしておくのは重要だからね。【地域】
って設定もウィンドウズ特有だし」
『ってことは他の OS だとそういう設定ってどーなってるの？』
「そうそう、そういう部分が難しくなってくるからねー。ランタイムだとそ
の辺はとりあえず気にしなくていいから」
『そういう便利さねー』
「それと、ランタイムみたく time() でのべ秒から取ると便利な使い方がで
きるから。たとえば、３時間後の日時を取得する場合」
『ん？　ランタイムなら tm::tm_hour に 3 を足すだけでいいんじゃない
の？』
「今が夜の２３時だったら？」
『あ、超えちゃうんだ。そしたら日にちを１日増やして』
「それで３１日になっちゃったら？」
『そしたら月を』
「でも１１月みたいに３０日で終わる月だったら？」
『げ、月を調べてそれで……あーでも２月とか閏年とか……はいはい分かり
ましたよー大変だねー』
「でも、のべ秒って関係ないでしょ」
『あ……そっか、 time() で取得したのに３時間分、だから 3 * 60 * 60 
を足せば』
「それを localtime() に渡せば、難しいことを考えなくていいわけ」

void CAnimeDlg::OnBDraw() 
{
    time_t lTime_t;
    time( &lTime_t );
    tm *pstTm;
    pstTm = localtime( &lTime_t );
    TRACE
        ( "%d年%d月%d日%d曜日%d時%d分%d秒\n"
        , pstTm->tm_year, pstTm->tm_mon
        , pstTm->tm_mday, pstTm->tm_wday
        , pstTm->tm_hour, pstTm->tm_min
        , pstTm->tm_sec
        );
    // 101年11月22日6曜日21時1分16秒

    // ３時間進めます。
    lTime_t += 3 * 60 * 60;
    pstTm = localtime( &lTime_t );
    TRACE
        ( "%d年%d月%d日%d曜日%d時%d分%d秒\n"
        , pstTm->tm_year, pstTm->tm_mon
        , pstTm->tm_mday, pstTm->tm_wday
        , pstTm->tm_hour, pstTm->tm_min
        , pstTm->tm_sec
        );
    // 101年11月23日0曜日0時1分16秒

    // 下のは前の。
    ::KillTimer( GetSafeHwnd(), 100 );
}

『おおっ、ちゃんと日付が変わってる！』
「ま、この辺は API でもできるだろうけど、ランタイムの方が簡単ってこ
とで」

/*
    Preview Next Story!
*/
『今回のって実用的〜』
「でも次回は使わないんだよねー」
『げ。ホントに余談って感じね』
「でもそういうのの方が重要かも」
『ってことは次回は重要じゃない？』
「ううん、かなり重要。というわけで次回」
＜ Version 7.21 タイマーの限界 ＞
『につづく！　って、タイトルが厳しい！』
「簡単そう見えて結構難しいっていう例かも」


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

・更新なしの予定
　スケジュールがややシャレにならん……。


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/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.com/Freeware/index.html#MailMagazine


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

    (C)KAB-studio 1999 - 2002 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

