2009年10月27日火曜日

日記ちゃん

 父上が突然無線ルータを買ってきて「今すぐ設定して使えるようにしろ、このウジ虫!」
というので、適当にセッティングした。ほぼデフォルト設定。

 ところが自分のノートPCの無線は壊れて機能しない上に、外付けHDD等の関係で移動も出来ず、またiPhoneや携帯ゲーム機も存在しない。父上もPCを1ヶ月に1回程度しか使わないので、無線の恩恵にほとんどあやかれない悲惨な状況になってる。ののしられ損である。なきたい。

2009年10月25日日曜日

日記ちゃん

 バニラオイルとバニラエッセンスって何が違うんだろうと売り場で悩んだことがある。そのときはよくわからないから購入は次回にしようと見送ったのだけど、そのとき分かったことはバニラエッセンスよりバニラオイルのほうが高いということだけだった。値段が2倍ぐらい違う。
 今日になってふと思い出したのでググって見たら、どうやらバニラエッセンスのほうが熱に弱く、加熱すると香りが飛びやすいらしい。熱を加えるお菓子なんかにはバニラオイルを使おう、というお話。熱を加えないお菓子って何があったっけとすぐには思いつかないけど。あー、アイスがあるか。
 バニラの風味の主要成分にバニリンってのがあるらしい。まんまだ。バニリンのインパクトはすごいな、たぶんこの先一生忘れないと思うわ。バニリン。バニリン。

[参考]

バニラ - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%8B%E3%83%A9

2009年10月14日水曜日

クリップボード関係のウィンドウメッセージ

 CF_DIBからデータ抜き出すのに疲れたよ。
ところがCF_DIBがくるときは大抵CF_BITMAPも来てるんでCF_BITMAPで事足りるうえに、CF_BITMAPはとくに加工せずにそのまま描画できちゃうから、CF_BITMAPだけでいいんじゃないかと妥協したくなる。


休憩だ……っ!


 画像ソフトからコピーを行ったときに、どういうデータでクリップボードにセットされるのか調べてた。
・Microsoft (R) ペイント ver 5.1
 CF_BITMAP(2), CF_METAFILEPICT(3), CF_DIB(8), CF_ENHMETAFILE(14), CF_MAX(17)
・プリントスクリーン
 CF_BITMAP(2), CF_DIB(8), CF_MAX(17)
・PictBear ver2.0
 [背景]CF_BITMAP(2), CF_DIB(8), CF_MAX(17)
 [レイヤー]送られてこない
・AzPainter2 ver2.05
 [コピー]送られてこない
 [他へ出力→クリップボード]CF_BITMAP(2), CF_DIB(8), CF_MAX(17)
・Microsoft (R) Office Excel 2003
 [画像データを選択しコピーしたとき]CF_METAFILEPICT(3), CF_ENHMETAFILE(14)

おまけ
・エクスプローラでファイルをコピー
 CF_HDROP(15)
・InternetExplorerにて画像を右クリック→コピー
 CF_BITMAP(2), CF_DIB(8), CF_HDROP(15), CF_MAX(17)

といったような感じ。
 レイヤー関係はクリップボードを使わないみたいだが、だから不便なんだよ。32bitにしてAlphaColorを0にでもすればいいんじゃないかと思わんでもないが、そんな簡単な問題でもないんだろうな。
 Officeに関しては、クリップボード関係を調べてたら一例で乗ってたので実験がてら。


 ところでCF_MAXってなんじょい?


#if(WINVER >= 0x0500)
#define CF_MAX 18
#elif(WINVER >= 0x0400)
#define CF_MAX 17
#else
#define CF_MAX 15
#endif


 とWinUser.hにあり、値がまちまちのようだ。結局なんのパラメータ?

2009年10月9日金曜日

&&より&のほうが速いか?

 trueが1になることを意識して最適化しようと思うとどうすればいいのかとアセンブラとにらめっこしていたが、


for (int i=0; i<100; ++i)
{
  num += (((i & 3)==0) && (num<100))!=0 ? 1 : 0;
}




for (int i=0; i<100; ++i)
{
  num += (((i & 3)==0) & (num<100))!=0 ? 1 : 0;
}


では、後者のほうが高速になると思われる。前者にはjgeとjmp,jiが含まれるが、後者にはjiしかない(forの分かと思う)。



 ほかに


for (int i=0; i<100; ++i)
{
  num += (((i & 3)==0) & (num<100)) ? 1 : 0;
}




for (int i=0; i<100; ++i)
{
  num += ((i & 3) == 0) & (num < 100);
}


だと、後者のほうが数命令少ないため、おそらく高速。実際、1億回回して時間を計ると後者が200ms程度速かった。

コンパイラ: VisualC++ 2005 Express Edition
CPU: Intel(R) Pentium(R) M processor 1400MHz
速度優先(/O2)で最適化してコンパイルした。


 よっぽどコアな部分のプログラムでもない限り意識する必要はないかと。速度が重要ならアルゴリズムを見直すほうが効果がある。

2009年10月7日水曜日

c++ではtrueは1

boolをfloatに暗黙の型変換?
http://sumishiro.blogspot.com/2009/08/boolfloat.html


 以前こんなことを書いたが考えてみれば、bool -> int -> floatで変換されたと思えばどうということはないな。クラスでこんな一足飛びな型変換ができちゃうのかなと少し試してみたが、再現できなかった。一足飛びな型変換は出来ないのかもしれない。

 また


C++言語仕様では、boolはintに変換でき、false→0/true→1 となっています。

--- ISO/IEC FDIS 14882:1998(E) ---

4.5 - Integral promotions [conv.prom]
...
-4- An rvalue of type bool can be converted to an rvalue of type int,
with false becoming zero and true becoming one.


true/falseは、1/0と保障されている?
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200504/05040024.txt
より引用。
 とあり、trueはc++では1らしい。


#include <cstdio>
#include <cstring>
int main()
{
bool b;
std::memset( &b, 2, sizeof(b) );
if ( b == true ) std::printf("b == true\n");
if ( b == 2 ) std::printf("b == 2\n");
return 0;
}


output:

b == true
b == 2

2009年10月6日火曜日

311号

http://cid-8cd7cf5ea9fbca55.skydrive.live.com/self.aspx/Public/music/no%20name311.ogg
2.3MB

製作時間:2時間程度
ツール:ピストンコラージュ ver0.9.1.4
音源:デフォルトの

 地味にテンションが高いが、これといって主張もしないので「何を表現したいんだ!」といらいらする、そんな曲に仕上がりました。うーん。