桜開花 85mm / 1:1.4

85mm 1:1.4 iso800 1/250 F=2桜の開花を撮っておこうと気がついたのは既に日没後。
でもまだ薄明るいからなんとかなるべと、とりあえず一番明るいレンズを付けて挑戦。ボケた部分は偽色っぽいのが見えるけどなんとかなるもんだ。
最近はデジタル化してズーム主体の暗いレンズのオンパレードだけど昔の明るいレンズってやっぱり素敵だわ。
1/250でシャッター切れるし。
背景にある醜い電線を分らなくしてくれるし。


85mm 1:1.4 iso800 1/200 F=2 flash1/64ついでにストロボにも挑戦。マニュアル発光で1/64でこんなもの。もう少し落としても良かったかな。

3桁ごとのカンマ区切り

数字を出力するときに3桁毎にカンマで区切るというよくあるコード。
なんとなく書いてみたのが format3_1 のコード。
それをちょっとづづいじっていって、短くしたのが format3_7 のコード。
短くなると、なんとなく嬉しい。

出力結果は、
123456789012345
3-1 123,456,789,012,345
3-2 123,456,789,012,345
3-3 123,456,789,012,345
3-4 123,456,789,012,345
3-5 123,456,789,012,345
3-6 123,456,789,012,345
3-7 123,456,789,012,345

大丈夫みたい。

// three_dig.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include "three_dig.h"

#include <iostream>
#include <stdlib.h>
#include <string>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 唯一のアプリケーション オブジェクトです。

CWinApp theApp;

using namespace std;

// 3桁ごとのカンマ区切り(正の整数専用)

//  無理せずに思いつくとおり書いてみる。
string format3_1(long long l) {
	string s = "";
	int d = 0;
	int n;
	do {
		// 3桁毎をチェックしてカンマ挿入
		if (d == 3) {
			s = ',' + s;
			d = 0;
		}
		d ++;

		//  下一桁をバッファの先頭に追加
		n = l%10;
		s = char('0'+(n)) + s;

		//  数値を1桁シフト(下一桁を取り除く)
		l /= 10;
	} while (l > 0);

	return s;
}

// l /= 10; と n = l%10; は直接書けばいいや。と、思って省略。
string format3_2(long long l) {
	string s = "";
	int d = 0;
	do {
		if (d == 3) {
			s = ',' + s;
			d = 0;
		}
		d ++;
		s = char('0'+(l%10)) + s;
	} while ((l /= 10) > 0);

	return s;
}

//  d のインクリメントを条件判断と一緒にする。
string format3_3(long long l) {
	string s = "";
	int d = 0;
	do {
		if (!(d++ % 3)) {
			if (d > 1) s = ',' + s;
		}
		s = char('0'+(l%10)) + s;
	} while ((l /= 10) > 0);

	return s;
}

//  1桁目の時のカンマ抑制 (d>1) も一緒にする。
string format3_4(long long l) {
	string s = "";
	int d = 0;
	do {
		if (!(d++ % 3) && (d>1)) s = ',' + s;
		s = char('0'+(l%10)) + s;
	} while ((l /= 10) > 0);

	return s;
}

// (l /= 10) > 0 は l /= 10 でいいことに気づく。
string format3_5(long long l) {
	string s = "";
	int d = 0;
	do {
		if (!(d++ % 3) && (d>1)) s = "," + s;
		s = char('0'+(l%10)) + s;
	} while (l /= 10);

	return s;
}

// if を ?: 演算子に置き換える。
string format3_6(long long l) {
	string s = "";
	int d = 0;
	do {
		s = char('0'+(l%10))
		  + (((!(d++ % 3) && (d>1)) ? ",": "") + s);
	} while (l /= 10);

	return s;
}

// do-while を for に変える。
string format3_7(long long l) {
	string s = "";
	for (int d=0; l ; d++, l/=10)
		s = char('0'+(l%10))
		  + (((!(d % 3) && d) ? ",": "") + s);
	return s;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	HMODULE hModule = ::GetModuleHandle(NULL);

	if (hModule != NULL)
	{
		// MFC を初期化して、エラーの場合は結果を印刷します。
		if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
		{
			// TODO: 必要に応じてエラー コードを変更してください。
			_tprintf(_T("致命的なエラー: MFC の初期化ができませんでした。\n"));
			nRetCode = 1;
		}
		else
		{
			// TODO: アプリケーションの動作を記述するコードをここに挿入してください。
			long long l = 123456789012345;

			cout << l << endl;

			cout << " 3-1 " << format3_1(l) << endl;
			cout << " 3-2 " << format3_2(l) << endl;
			cout << " 3-3 " << format3_3(l) << endl;
			cout << " 3-4 " << format3_4(l) << endl;
			cout << " 3-5 " << format3_5(l) << endl;
			cout << " 3-6 " << format3_6(l) << endl;
			cout << " 3-7 " << format3_7(l) << endl;
		}
	}
	else
	{
		// TODO: 必要に応じてエラー コードを変更してください。
		_tprintf(_T("致命的なエラー: GetModuleHandle が失敗しました\n"));
		nRetCode = 1;
	}

	return nRetCode;
}

Bluetoothキーボード

お友達からビール6缶でトレードしたキーボード。iPoneで便利に使わせてもらってます。

[Win]+[Space]キーで切り替え。キーボードから[Win]+[Space]キーを押すと、キーボードのモード切替が出来ることを学習しました。

Win7でも使えました。でも、いったん接続が切れたらデバイスを削除してからでないと再利用できない。これはiPhoneでも同じですけど、面倒ですね。

温湿度センサ

お休みなので以前から気になっていたセンサを試してみた。

HIH-4030湿度センサ DSC_6901-75千石さんで見つけた「HIH-4030 湿度センサー」。
湿度が電圧でリニアに測れるらしい。

HIH-4030 出力 DSC_6906-75センサの出力電圧は2.049V。湿度への換算はデータシートの式から
VOUT=(VSUPPLY)(0.0062(sensor RH) + 0.16)とあるので湿度を求めるには、
sensor RH = (VOUT / VSUPPLY – 0.16) / 0.0062 でいいのかな。
そうしますと、VOUT=2.049 に VSUPPLY=5.04 なので、
sensor RH は電卓で計算すると、約39.8%となります。これに温度補正を加えるようです。

LM61 温度センサ DSC_6903-75温度はLM61でお手軽に計測。このセンサは1℃あたり10mVの出力変化で、0℃のときは600mVを出力してくれる。つまり出力が0Vなら-60℃、800mVなら+20℃となる。分かりやすいのでお気に入りのセンサです。

LM61 の出力 DSC_6905-75LM61の出力は824mV。ということは室温22.4℃なので、データシートにある温度補償の式、
True RH = (Sensor RH)/(1.0546 – 0.00216T) に代入すると、39.8 / (1.0546 – 0.00216*22.4)≒39.554。つまり約39.6% が温度補償後の湿度となりました。