Navigation Log - なびろぐ -
2006/01版 その3

...X680x0 spirit inside...

Last update: Saturday, 04-Jun-2011 17:29:12 JST
Access Count: (start 1997/07/04)
この日記はGNSで生成しています。
この日記の画像はOPTPiX webDesigner Ver.4で生成しています。

hauN
Go amazon.co.jp

■ご注文リストから■ [一覧]
■Amazonギフト券■ [購入]
四月馬鹿 (アクションコミックス) []
四月馬鹿 (アクショ...
Amazonほしい物リスト


2006/01/21 (土) 晴後曇

はうンスキー2006 2日目:あさ〜 (イベント, スキー)

きょうの朝飯
きょうの朝飯
_ 11:00PM充電開始、7:00AM再起動。

_ 朝風呂のあと飯。


はうンスキー2006 2日目:スキー (イベント, スキー, 写真)

_ 0900、ホワイトワールド尾瀬岩鞍到着。今日はのんびり、どちらかというと写真撮影メイン。いや昨日も撮りまくったけど。

_ ・・・と思ったら、メモリカードエラー。一度お祭り広場へ戻ってZaurusでデータ退避&リフォーマット。なにげにこういう時にざうは便利だ。

_ 1130昼飯。珍しくピザとソーセージなんて昼飯。ついでにホットワイン。

_ 午後も似たような感じでのんびり。ジャンプ台を飛ぶ連中が多数いたので下でカメラを構えてみたり。

_ 1530スキー場をあとに。今回のスキーはこれで終了。

20060121 はうンスキー2006 2日目
武尊山を望む
武尊山を望む
スキーアイテム?
スキーアイテム?
リフト乗る親子
リフト乗る親子
レストランオクタ
レストランオクタ
きょうの雪
きょうの雪
西山ゲレンデ
西山ゲレンデ
レストハウスホルン
レストハウスホルン
リフト乗り場
リフト乗り場
リフト乗る人たち
リフト乗る人たち
西山頂上
西山頂上
武尊山を望む2
武尊山を望む2
禁煙かまくら
禁煙かまくら
コブ攻略する人たち
コブ攻略する人たち
西山の麓
西山の麓
戸倉スキー場がみえる
戸倉スキー場がみえる
お祭り広場屋内
お祭り広場屋内
ピザとソーセージ
ピザとソーセージ
コブ付40度単独攻略
コブ付40度単独攻略
西山第1ロマンスリフト
西山第1ロマンスリフト
朽ちた看板
朽ちた看板
雲行きが怪しい
雲行きが怪しい
滑走
滑走
女子国体ゲレンデ
女子国体ゲレンデ
ゲレンデを見上げる
ゲレンデを見上げる
あずきのロールケーキ
あずきのロールケーキ
放射
放射
ボードジャンプする人1
ボードジャンプする人1
ボードジャンプする人2
ボードジャンプする人2
十二山神宮
十二山神宮
駐車場のくまー
駐車場のくまー

はうンスキー2006 2日目:よる〜 (イベント, スキー)

きょうの夕飯
きょうの夕飯
_ 1600前、宿に到着。昨日と同じく風呂のあと写真の編集。

_ 1800夕飯。鍋のヒラタケうまー。

_ 飯のあとはPC叩きつつ、消灯までだらだら。


2006/01/22 (日) 晴時々曇

はうンスキー2006 3日目:あさ〜 (イベント, スキー)

きょうの朝飯
きょうの朝飯
_ 11:30PM充電開始、6:30AM再起動。

_ きょうも朝風呂のあと飯。片付けしてマイメロ観て撤収。


はうンスキー2006 3日目:帰り道 (イベント, スキー)

_ 1000過ぎ出発。ピーカンの中を走り、オルゴール館でおみやげと風景撮影。

_ 関越はいたって快調、川越で下りて新河岸の午で昼飯。

_ ここからわし運転で、1400過ぎかいン投下、1500前うち到着。じゃあとは気をつけて。>けんと様

_ 1630過ぎけんと様も無事到着の模様。

20060122 はうンスキー2006 3日目
きょうの松かぜ
きょうの松かぜ
尾瀬大橋
尾瀬大橋
オルゴール館
オルゴール館
沼田市街を望む
沼田市街を望む
馬車道新河岸店
馬車道新河岸店
サラダ@午
サラダ@午

よる〜 (生活)

ちぢれほうれん草と舞茸のバター炒め
ちぢれほうれん草と舞茸のバター炒め
_ 買い物とかEMS発送とか。

_ 録画処理しながら夕飯。ちぢれほうれん草と舞茸のバター炒めが極上に旨い。


2006/01/23 (月) 晴時々曇

あさ〜 (生活)

_ 2:00AM充電開始、8:00AM再起動。


今日のブックマーク (ブックマーク)


GetOpenFileName() (PC, プログラム)

_ GetOpenFileName()

  • nFileExtensionが0かどうかで判定するのは正しくない。MSDN - OPENFILENAME Structureによると、nFileExtensionの項に「If the user typed "." as the last character in the file name, this member specifies zero.」・・・つまり、複数選択でなくても0で返るケースがあるということで。
  • OFN_ALLOWMULTISELECTが指定されているとき、選択ファイルが1つのときは"path\0\0"、2つ以上のときは"dir\0file1\0file2\0...fileN\0\0"が返るので、それで判定する。
  • ディレクトリ名の格納には、「末尾の"\"が付いている」ことを規定、つまりPathRemoveBackslash()よりPathAddBackslash()のほうがルールが一本化されて安全。*1

*1: フォルダ"c:\hoge\"にフォルダ"01"と実行ファイル"01.exe"があるとき、"c:\hoge\01"というパスがフォルダでなく実行ファイルを指してしまうケースがある。これを回避するためにも、「ディレクトリ名には"\"を付けて格納する」ほうが安全。

_ ということで、手許のソースから貼り付けてみる。


#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <shlwapi.h>

int myGetOpenFileNameMulti(
  TCHAR *startpath,
  TCHAR ***ret_pathlist,
  int *ret_npathlist
) {
    OPENFILENAME ofn;
    TCHAR dir[MAX_PATH];
    TCHAR *p;
    TCHAR *file;
    TCHAR path[MAX_PATH*256];
    TCHAR **pathlist;
    TCHAR **newpathlist;
    int pathlistsize;
    int npathlist;
    int i;
    int dirlen;
    int filelen;

    // 初期化
    pathlistsize = 16;
    pathlist = (TCHAR **)GlobalAlloc(
      GPTR, pathlistsize*sizeof(TCHAR *)
    );
    if ( pathlist == NULL ) {
        return (-1);
    }
    npathlist = 0;
    *(ret_pathlist) = NULL;
    *(ret_npathlist) = npathlist;

    // API発行
    lstrcpyn( path, startpath, sizeof(path) );
    lstrcpyn( dir, startpath, sizeof(dir) );
    PathRemoveFileSpec( dir );
    PathAddBackslash( dir );
    if ( !lstrcmpi( path, dir ) ) {
        lstrcpyn( path, "", sizeof(path) );
    }
    ZeroMemory( &ofn, sizeof(ofn) );
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.lpstrFilter = "すべてのファイル (*.*)\0*.*\0";
    ofn.lpstrFile = path;
    ofn.lpstrInitialDir = dir;
    ofn.nMaxFile = sizeof(path);
    ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST |
                OFN_EXPLORER | OFN_ALLOWMULTISELECT;
    if ( GetOpenFileName( &ofn ) == FALSE ) {
        GlobalFree( pathlist );
        return (0);
    }

    // 単一ファイル選択ならすぐ終了
    if ( ( !(ofn.Flags & OFN_ALLOWMULTISELECT) ) ||
         ( path[ lstrlen( path )+1 ] == '\0' ) ) {
        p = (TCHAR *)GlobalAlloc( GPTR, lstrlen( path )+1 );
        if ( p == NULL ) {
            goto err_allocpath;
        }
        lstrcpy( p, path );
        pathlist[npathlist++] = p;
        goto ret_ok;
    }

    // 複数ファイルのpathを展開しながらストア
    lstrcpyn( dir, path, sizeof(dir) );
    PathAddBackslash( dir );
    dirlen = lstrlen( dir );
    file = path+lstrlen( path )+1;
    while ( file[0] ) {
        filelen = lstrlen( file );
        p = (TCHAR *)GlobalAlloc( GPTR, dirlen+filelen+1 );
        if ( p == NULL ) {
            goto err_allocpath;
        }
        while ( npathlist >= pathlistsize ) {
            pathlistsize *= 2;
            newpathlist = (TCHAR **)GlobalReAlloc(
              pathlist, pathlistsize*sizeof(TCHAR *), 
              GMEM_MOVEABLE|GMEM_ZEROINIT
            );
            if ( newpathlist == NULL ) {
                goto err_allocpath;
            }
            pathlist = newpathlist;
        }
        PathCombine( p, dir, file );
        pathlist[npathlist++] = p;
        file += filelen+1;
    }
    goto ret_ok;

  ret_ok:;
    *(ret_pathlist) = pathlist;
    *(ret_npathlist) = npathlist;
    return (npathlist);

  err_allocpath:;
    for ( i=0; i<npathlist; i++ ) {
        GlobalFree( pathlist[i] );
    }
    GlobalFree( pathlist );
    return (-1);
}


int main(
  int argc,
  char *argv[]
) {
    TCHAR **pathlist;
    int npathlist;
    int ret;
    int i;

    if( argc == 1 ) {
        printf( "usage: %s [startpath]\n", argv[0] );
        exit( EXIT_SUCCESS );
    }

    ret = myGetOpenFileNameMulti(
      argv[argc-1], &pathlist, &npathlist
    );
    if ( ret < 0 ) {
        printf( "error.\n" );
        exit( EXIT_SUCCESS );
    }
    if ( ret == 0 ) {
        printf( "no file selected.\n" );
        exit( EXIT_SUCCESS );
    }

    for ( i=0; i<npathlist; i++ ) {
        printf( "%d: %s\n", i, pathlist[i] );
        GlobalFree( pathlist[i] );
    }
    GlobalFree( pathlist );
    return( EXIT_SUCCESS );
}

// [EOF]

_ 追記。「!(ofn.Flags & OFN_ALLOWMULTISELECT)」の"&"がダブっていた。感謝

_ もともとこのコード、このまま使うだけならofn.Flagsの値なんぞチェックしなくていい。コピペ&修正でこのコードを使いまわすとき、上のOFN_ALLOWMULTISELECTを外してしまった場合の対策で、今回ここに書くために追記したもの。それでミスってちゃ世話ない・・・(苦笑)。


2006/01/24 (火) 晴時々曇

あさ〜 (生活)

_ 2:00AM充電開始、8:00AM再起動。


tidyでXHTML Atomを吐く (PC, 日記)

_Tidyを呼んでみてはどうか」ということで、tidyを持ってくる。

_ 普通にコンパイル・インストールして、Atomのcontent出力部に"tidy -utf8 -q -asxhtml"をpipe、<body>〜</body>を抜き出して出力するように。

_ ということで、XHTML Atom


今日のお買い物 (買い物)


来月の購入予定 (購入予定)

_ いつものまんが王


今日のブックマーク (ブックマーク)


2006/01/25 (水) 晴時々曇

あさ〜 (生活)

_ 3:00AM充電開始、9:30AM再起動。


続GetOpenFileName() (PC, プログラム)

_ 先日の続きnFileExtension話。

  • なぜかドキュメントの記述と違って、「拡張子のないファイル」を指定すると0が返る。「If the user did not type an extension and lpstrDefExt is NULL, this member specifies an offset to the terminating NULL character.」と書かれているにも関わらず、lpstrDefExtがNULLまたは指定の拡張子のファイルがない状態で、かつ拡張子のないファイルを指定したときは常に0が返る。謎だ。
  • コマンドラインから「echo 1>c:\temp\hoge」を実行すると拡張子のないファイル"hoge"ができるが、もうひとひねりして「echo 1>\\?\c:\temp\hoge.」とすると、末尾に"."の付いたファイルを作れる。UNCパスを使うといろいろ変なことができる例。

今日のブックマーク (ブックマーク)

  • 山岳展望
  • ダイヤモンド富士
  • ピクセルシェーダーを一気に3倍増!——ATI、デスクトップパソコン向けハイエンドGPU“Radeon X1900”シリーズを発表!
  • A3カラープリンター参入 コニカミノルタビジネステクノロジーズ
  • ディズニー、アニメ映画のピクサーを約74億ドルで買収


  • 2006/01/26 (木) 晴時々曇

    あさ〜 (生活)

    _ 4:00AM充電開始、10:00AM再起動。


    今日のお買い物 (買い物)


    今日のブックマーク (ブックマーク)


    2006/01/27 (金) 晴時々曇

    あさ〜 (生活)

    _ 4:00AM充電開始、10:00AM再起動。


    qsv系spam対策 (PC)

    _ qsv系spam対策のreject_nsが古くなってきたのか、最近spamの削減効果がイマイチになってきた。

    _ 千熊屋さんとこのリンクに従い、メールアドレス収集ロボット対策を読んで、spam対策まとめからcronで自動的にreject_nsを頂いてくるようにする。


    今日のお買い物 (買い物)


    突発肉 (肉体会)

    きょうの肉
    きょうの肉
    _ 今月で退職の店員さんに花を贈るという名目で、突発肉。


    今日のブックマーク (ブックマーク)


    2006/01/28 (土) 晴時々曇

    あさ〜 (生活)

    _ 3:00AM充電開始、9:30AM再起動。


    KissDNにDK-21Mを装着 (写真)

    KissDNにDK-21M装着
    KissDNにDK-21M装着
    _ 買ったのは昨日なんだが、レポートとして別枠で。

    _ 言うまでもなくニコンの製品。だがCanonのEOS Kiss Digital Nに付くということで購入。20Dにも付くらしいけど。

    _ 一応きちんとはまる。ただ1mm程度横が広いらしく、横に少々ガタつくうえにノッチもはまらないので少々抜けやすい。うちではスペーサー&接着効果を狙って、隙間部分に厚手の両面テープを細く切ったものを詰めてやることにする。

    _ 「メガネをしていると視野がケラレやすくなる」という話があったが、わしは裸眼なのでぎりぎり・・・周辺部の光量が少々落ちているかな・・・くらい。変な滲みや流れは感じられない。

    _ 「1.17倍の拡大効果」は、案外大きい。ファインダーを覗いたときのサイズだけでいえば、「20Dにかなり近く」なる。もちろん質が変わるわけじゃないから、あくまで「大きさ」だけ。ただ、明らかにピントはとりやすくなる。

    _ あと、副次的な効果として、アイピースの出っ張り分だけ本体と顔との距離が離れるため、「背面液晶が顔の汗や脂で汚れにくくなる」という利点がある。いままではハクバの液晶シェードを使って防いでいたんだが、なくてもなんとかなりそう。もっとも、このシェードとアイピースは併用できないので、どっちかを選ばないといけないんだが。

    _ 以下、関連リンク。


    MR新年会 (イベント, MR)

    きょうの寿司
    きょうの寿司
    _ 春日寿司で12人。食いすぎ・・・(苦笑)。


    2006/01/29 (日) 晴時々曇

    あさ〜 (生活)

    _ 4:00AM充電開始、10:00AM再起動。


    駅弁食う (生活)

    青と赤
    青と赤
    _ 買い物ついでに昼飯なに食うかとさまよっていて、ふと目に入ったさいか屋の駅弁&物産展に行く。

    _ ・・・ほとんど売り切れ。かろうじて残っていた牛肉どまん中@米沢といかめし@森を食う。


    今日までのお買い物 (買い物)


    GNS4.1 (GNS)

    _ 4.1がほぼ完成。数日間問題がなければリリース予定。


    今日のブックマーク (ブックマーク)


    2006/01/30 (月) 晴時々曇

    あさ〜 (生活)

    _ 2:30AM充電開始、9:30AM再起動。


    電気用品安全法@ハードオフ (イベント)

    _ 電気用品安全法の影響が出ているということで、近所のハードオフを視察。

    20060130 ハードオフ
    ハードオフ川崎大師店
    ハードオフ川崎大師店
    電気用品安全法のお知らせ
    電気用品安全法のお知らせ
    AVアンプ半額!
    AVアンプ半額!
    軒並み値下げまくり
    軒並み値下げまくり

    _ 川崎大師店では「一部商品の買取ができなくなります」という掲示と、施行後に問題がありそうな商品の値引き販売がすでに始まっていた。高級AVとか電子楽器とかが狙い目といえる。

    _ ちなみに、その後に行った「ブックオフ中古劇場 国道1号多摩川大橋館」ではまだ掲示なし。少々遅れてるかな・・・。


    今日のブックマーク (ブックマーク)


    2006/01/31 (火) 曇時々雨

    あさ〜 (生活)

    _ 3:30AM充電開始、9:30AM再起動。


    今日のお買い物 (買い物)


    GNS4.1 (GNS)

    _ 約束通り、GNS4.1公開。

    _ 大きな変更点。

    • Atom出力を可能にした。
    • TB/CMフィルタをWWW環境のGNS更新フォームから編集可能にした。
    • TB/CMデータベースをWWW環境から編集可能にした。

    Amazonみすていく (PC)

    _ 去年の9月ごろ、Amazonの価格入力間違いで2万円程度のコンピュータチェアが10499999円で出るという出来事があった。面白そうなのでカートに入れてヲチしてたんだが、今日見たら

    エレコム コンピュータチェア CCH-M002ABK ブラックがショッピングカートに
    入ってから、この商品の価格は¥ 10,499,999から¥ 10,290に下がりました。
    ショッピングカート内の商品は、それぞれの商品の詳細ページに表示されて
    いる最新の価格が反映されています。 
    

    _ という表示が。つい笑ってしまっつ。


    ぐるぐる (ぐるぐる)

    _ かの国でも山小屋へ行く殿。楽しんでるかな・・・?

    _ 日本酒は変質には強いというのは「醸造酒の中では」の話かと・・・抜栓後のワインやビールが1日どころか数時間でダメになるのに対して、日本酒はもっともつという程度。一升瓶じゃなく四合瓶で買ってみては。

    _ 魔法少女リリカルなのはA’sのDVD。によると、Vol.2Vol.3にもCDが付くらしい。何入れるんだろ・・・?

    _ “捨てるほどの”失敗作。要らんショットを削除するのって、要るショットを選出するより数段面倒だと思うのはわしだけか・・・「めんどくさいから全部とっとく」ということで。


    今日のブックマーク (ブックマーク)




    hauN Last update: Saturday, 04-Jun-2011 17:29:12 JST
    Access Count: 824101 (start 1997/07/04)

    メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]

    「表紙へ戻る」
    「会議室」 「最新版」 「なびろぐindex」 「GNSソースを読む」