PC関係のメモ
INIファイルの保存ディレクトリを取得する(2) / PNGけっこういいかも / 危険なコーディング / TCHARはchar? / CStringとマルチバイト / 文字列操作
INIファイルの保存ディレクトリを取得する(2)
http://techtips.belution.com/ja/vc/0027/より
_tsplitpathの引数で必要ないところはNULLにすればいいからfilenameとextは必要なかった。
CString appdir; //splitpath用 TCHAR drive[ _MAX_DRIVE ]; TCHAR dir[ _MAX_DIR ]; TCHAR path[ MAX_PATH ]; // 実行中のプロセスのフルパス名を取得する ::GetModuleFileName(NULL, path, sizeof path / sizeof path[0] ); // フルパス名を分割する _tsplitpath( path, drive, dir, NULL, NULL ); // アプリケーションディレクトリ文字列を作成 _tmakepath( appdir.GetBuffer( MAX_PATH ), drive, dir, NULL, NULL ); appdir.ReleaseBuffer(); return appdir;
PNGけっこういいかも
昨日のSVGの調査のメモに関して、libpngを使ってはどうかとツッコミをもらった。
libpngだとjpegとかgifとかと手間とか手順とか一緒かなー、と思ってて気づいたんだけど大事なことを書くのを忘れてた。「数値データ」は座標データのことで、本来の目的では画像にしたいというのはグラフ化したいのではなくて、実際に座標から点なり線を描画して視覚化したかったのである。
ツッコミの方の名前欄はGDだったのでおそらくグラフにすることを考えて、GDとlibpngを使ってはどうかということだと思う(違ったらごめんなさい)。ていうか昨日の書き方(数値データ)だとそう思うのが普通かも。
で、グラフについては考えてなかったんだけど、統計情報も取るのでグラフを出すのはそれはそれでやってみたい。グラフライブラリに関してもGDに限らず他にもありそう。
今かいてて思ったんだけど、座標データから点/線を描画してSVGなどのベクタ画像じゃなくてラスタ画像作るときのフォーマットとしてはjpegは妥当じゃないな。にじんだりするとまずいし。gifについても256色だと線に色とかつけてくとちょっと心許ない。pngなら劣化も無いしlibpngで手軽に扱えそうだし色も十分。アルファチャンネルも利用できるし、レイヤーの概念はあるんだっけ?SVGよりは枯れてるし案外良いのでは・・・。もちろん他にも山ほどラスタ画像フォーマットはあるけど、TIFFとか枯れすぎててつまらないし。WEB方面では性能を活かしきれてないPNGだけどゲームやらこういうときにはとても便利なフォーマットだ。Thanks gdさん。
相変わらず思考そのままメモってるから話がとびとびになってるけどそのまま発行。
危険なコーディング
if( a == 0 )
{
}
こう書くつもりで、下のように書いてしまった。
if( a == 1 );
{
}
VCのワーニングですぐに気づいたけどあやうかった。
TCHARはchar?
TCHARって_UNICODEを宣言してない限りcharだと思ってたんだけどどうもちがうっぽい動作が・・・。
CStringとマルチバイト
CStringについて今までかなり誤解していた。
- CString::GetLength()は文字数を取得する関数だと思っていたらバイト数を取得する関数だった。
- CString::GetAt()は1文字を取得する関数だと思っていたら1バイトのcharを返す関数だった。
- CString::Left()の引数は文字数だと思っていたらバイト数だった。
- CString::TrimRight()の引数にスペースを指定したら全角スペースのトリミングができると思っていたらできなかった。
うぉい!全然マルチバイト対応してないじゃん!ちなみにこれら1バイト(char)といってもTCHARなので_UNICODE指定すると2バイトになるんだろう。多分。っていっても単位が変わるだけだけど。
マルチバイト対応というより、文字エンコーディングか。マルチバイトに関してはTCHAR使うことで対応しているわけだし。
つまり、CStringはあたりまえのことだけど文字エンコーディングには一切関知しないクラスではないのだと今更ながらに気づいた。
文字列操作
今日は一日文字の比較とかチェックのコードを書いていた。久々にビット演算とかがちょこちょこ。お、ポインタとかビット演算とかだいぶ慣れてきたんじゃないか?という感じでちょっとうれしい。
しかしCで文字列を操作するプログラム、というとよほど気をつけていてもバグが出そうというイメージがある。どっかに綺麗なコードがないかなー。今度PHPのマルチバイト文字列操作関数のコードを見てみよう。確かmbfilterだったけどライセンス関係でライブラリ化するとかしないとかMLで議論されてた気が。
mbfilterで検索していたらこんな記事発見。
http://www.textfield.net/gtext/archives/000004.html
PHP関数のmb_convert_kanaをJavaに移植したサンプルです。mb_系の関数群はC言語で記述されたUnicode対応の非常に賢いコード群で覗くと非常に参考になります。
良いコードに出会えました。
飲み会 / Winnyの技術 / 誤読いやな法則: 身近な人の偉大さは半減する
飲み会
AjaxやらGoogleMapの話が出る。現場よりむしろお客さんとの打ち合わせでそういった話が出るらしい。
Winnyの技術
大須の三洋堂に行ったが売り切れ。基本的に本は一度は手にとってから買いたいのでちょっと待つ。評判だけ聞いてると買うしかなさそう。作者自らWinnyに流すらしいけどあんまり関係ない。だって電子データだと読まないし、何より一応技術者として必要な本であればお金を出したい。
誤読いやな法則: 身近な人の偉大さは半減する
いやなブログ: 読解いやな法則: 身近な人の偉大さは半減する
間違った解釈をしていた。これは知っている人が、実はネット上ではすごい人だったとき、のことだと思っていた。同じ職場でも一緒には仕事をしたことがない場合に発生しそう。
「読解いやな法則」では過大評価のことであると解説されている。
月々の生活費
単位は万円で、100円単位は四捨五入。従量課金の物はおよその平均で算出。
携帯電話(NTTドコモ) 1.5(従量課金 約1.1~1.7) モバイル通信(au PacketWin) 0.7(定額+従量課金 0.3~0.7) サーバ用プロバイダ(ASAHIネット) 0.1 実家用プロバイダ(BB.excite) 0.1 自宅用プロバイダ(ASAHIネット) 0.1 自宅用インターネット回線(NTT光プレミアム) 0.4
合計2.9万円。結構多い…。
住宅費。
部屋代 5.5 水道代 0.2 電気代 0.7(従量課金 0.5~1.0) ガス代 0.3
合計6.8万円。電気代はちょっと高い。
食事代は幅があるのでざっくり。
食事代 6.0(約2000円/日)
平日の昼食はお弁当を買うか、食べに行くか。お弁当なら500円。食べに行くと800円~900円。
夕飯は自分で作るから多分500円未満だろうか。
休日の昼食は食べなかったり、自分で作ったり、食べに行ったり。食べに行くとカフェとかなので1000円~2000円くらい。
夕飯は自分で作ったり、食べに行ったり。
交際費は最近減ってるので、飲み会が2~4件/月くらい。費用は5000円/回くらい。多分。
交際費 1.5(3回 5000円/回)
交通費。電車はほぼ使わず車のみ。月2~4回くらい給油で、4000円/回。
交通費 1.2(3回 4000円/回)
全体の合計は18.4万円。
後で年間で必要なもの(車の保険とか)を出しておこう。
他にも保険とかあったような。
Winnyの技術(金子 勇/アスキー書籍編集部)
