June 2009 Archives
7月22日の午前中に皆既日食を国内で観測することができる。私が住む船橋では70%ほど欠けるとのこと。思ったより欠けるようなので写真撮影にトライしてみようと思う。ということで、機材、構成を悶々と考えてみた。相手が太陽なので、強烈な可視光だけでなく赤外というか熱との勝負でもある。あと紫外線。
まず可視光。Wikipediaによると、太陽は月よりも14.1等級明るいとのこと。1等級違うと100の0.2乗違うので、太陽は月よりも100の2.82乗等級すなわち436515倍明るい。これは18.7EVに相当する。月を撮影の露出からざっと19段露出を落とさなければならない。これは大変だ。ND400という色を変えないで光を1/400に減光するというフィルタが手に入りにくいようなので、次に濃いフィルタであるND-8を使うと、6枚は必要だ。あとは月を撮影してみて、適正露出を見つければ、それを基準に太陽光での露出をおおよそ推定することができる。ここまでは可視光の話。
次に赤外線。職場で赤外線にNDフィルタを使っているが、赤外にND-8を使っても光量は1/8になってくれない。浜ホトの資料によるとガラス(Si)の赤外線の透過率は50%程度のようなので、NDフィルタの基板がガラスだとすると、6枚重ねで1.6%にまで落ちる。
ただ受光素子にはレンズで集光された光が結像する。レンズ径を50mm、受光素子に結像するスポット径を1mmとすると、レンズを通す前の太陽光の625倍の光がそのスポットに当たる。NDフィルタ6枚重ねを考慮しても10倍の光に相当する。これは危険だ。フレーミングと撮影をするときだけレンズを太陽に曝し、それ以外はレンズキャップか覆いを被せなければ、受光素子やフィルムが熱で損傷をうける可能性が高い。もしかすると発火するかもしれない。一眼レフの場合、レフ板でファインダーにレンズを透過した赤外線も導かれるので、フィルターをしているとはいえ、フレーミングの時間も最小限にするべきだ。さもないと人間の受光素子すなわち網膜が焼ける可能性がある。
最後に紫外線だが、紫外線はガラスの透過率は低いため、ND-8フィルタの6枚重ねで大部分がカットされる。浜ホトの資料によると真空紫外で透過率が50%程度なので受光素子に到達する紫外線は赤外線同様の議論になる。もう少し波長が長いほうは、UVカットフィルタが効くだろう。
ポイントはフィルタの6枚重ねのようだ。おそらくND-400の2枚重ねではここまで紫外、赤外をカットできないはずだ。ちなみにプロはD4というND-10000フィルタ相当のフィルタを使とのことだ。これは金属基板なので赤外の透過率は低い。こっちのほうが安全で確実だ。でも高い。実はND-8フィルタ6枚と値段はあまり変わらなかったりするが。さらに太陽光撮影のときは、できるだけ長焦点レンズを使って受光素子に結像する面積を広くするべきだろう。
言うまでもなくこの記事には計算間違いや勘違い、見落としがある可能性がある。私を含め素人の太陽光の直接撮影は非常に危険な行為である。はっきり言って、この程度のことが理解できなければ太陽の撮影はやらないほうが良いと思う。おそらくフィルムが発火するか、受光素子が焼けるか、最悪失明するだろう。この記事を真に受けてカメラを壊したり、失明しても私は責任をとらない。ってかとれないので、あしからず。
写真は後日。
2009-06-26追記
どうやらkenkoがND-400フィルタを販売するようだ。なのでND-400を2枚使えば、ND-8を6枚重ねにする必要はなくなった。だが赤外線のガラスの吸収が減るので、長焦点で撮る、レンズに直射日光が入る時間とファインダを覗くを極力短くすることは変わらない。紫外線はUVフィルタを入れることで対応する。
昨日、今日と連続で終夜運転の夜シフトだった。私が若手で一番機動力があるので仕方がないが。昼間10時間睡眠をかましたにもかかわらず、眠かった。
今日は東京エリアDebian勉強会に参加する予定だったが、今日仕事でミスを犯してしまい、そのツケを払わざる得なくなり参加中止....orz
昨日 argv.org にある私のWeb Pageを整理していたら、昔書いた日記のようなものが出てきた。2003年の日付がある。例によって3日も続いていないが、そのころの文章の方が今よりも面白いのが悲しい。
このblogのblogサーバプログラムを更新した。おそらく見た目にはなにも変わっていないはず。運用している私にも何が変わったかわからないくらいだ。問題があったら知らせてください。
先週の日曜日に 13 inch MacBookPro を購入。いままで持っていたMacBook(白)は下取りに出す。ヨドバシのmac売り場では、最大20,000円で買い取り的な記述があったので、10000円で売れれば御の字と思っていたら33,000円で売れた。 せっかくなので、Adobe LightRoom ver. 2も購入。
アルミ一体整形になったせいか重量が軽い。メモリも4GByte載っているので動作も軽い。Leopardのスタックも良い感じだし、タッチパッドに右クリックが導入されたのも心地よい。
私は普通laptopを買うときは、それまで持っていたlaptopが壊れていかんともし難くなってから購入していたが、今回はまだ普通に使えるのに購入した。なぜならGPUで遊びたかったからだ。Snow LeopardからOpenCVがサポートということなので、今のうちからCUDAで遊んでおこうという魂胆。さらにiPod touchのアプリも作れるようになる。あとGoogle Developer DayでAndroid開発用の携帯電話をもらったので、Androidでも遊べるか。まぁ最近忙しいので遊んでいる時間があるのかという問題はあるが。
そういえば、Adobeの人がPhotoshopで普通のぽっちゃりした女の子の写真をアイドルちっくにレタッチするというデモをやっていた。ひずみをいれて、目を大きくしたり、あごのラインを細くしたり、ぼかしを入れて肌をきれいにしたり....なんか笑ってしまった。
Snow Leopardから64bit OSになるみたいなことをWWDCの基調講演で言っていたのでLightRoomがSnow Leopardになっても動くようサポートがあるかと聞いたら、動くよと言われた。まぁ64bit版をダウンロードしろと言われるのかと思って調べてみると、Leopardでもちゃんと64bitで動いている。Leopardって64bit OSだったのね。すばらしい。
前回の記事のhaveの指摘に従い、参照渡しをやめてヴェクタを返す関数にしてみた。
std::vector<string>
slice(const std::string source, const std::string dem)
{
std::string::size_type i1 = 0;
std::string::size_type i2 = source.find(dem);
std::vector<string> retval;
if(std::string::npos == i2)
return retval;
std::string s = source + dem;
do{
retval.push_back(s.substr(i1, i2-i1));
i1 = i2+1;
}while(std::string::npos != (i2 = s.find(dem, i1)));
return retval;
}
ちょっと効率は落ちたが、Atomicになったので前回のコードにくらべ、マルチスレッドプログラミングで安全に使えるようになった。
Thanks! nice comment > Have
C++を書いていて、JavaのSttringTokenizerのようなことをやりたいことがある。C++標準ライブラリだけで書いてみた。
void slice(const std::string source,
const std::string dem,
std::vector<std::string> *retval)
{
std::string::size_type i1 = 0;
std::string::size_type i2 = source.find(dem);
if(std::string::npos == i2)
return;
std::string s = source + dem;
do{
retval->push_back(s.substr(i1, i2-i1));
i1 = i2+1;
}while(std::string::npos != (i2 = s.find(dem, i1)));
}
この関数は、sourceで指定した文字列をdemで指定した文字で切り分けて、切り分けた結果をretvalで指定したヴェクタに格納ものである。テストしてみると。
using namespace std;
int main(void)
{
string source =
"DCV_,___,___,-00.0073E-3,DCV_,___,___,+00.000E-3,6247865";
vector<string> vec;
vec.clear();
slice(source, ",", &vec);
if(vec.empty()){
cout<< "not found"<< endl;
return -1;
}
cout<< vec[3]<< " "<< vec[7]<< endl;
return 0;
}
$ ./a.out
-00.0073E-3 +00.000E-3
ちゃんと値は切り出せている。listに結果を格納するようにすれば、もっとStringTokenizerっぽくなるかな。
愛用のカメラが壊れて、後継機を購入したことを先日書いた。今日、カメラに入っている写真を取り出そうと電源を入れたら直っていた。正確にいうと症状が出なくなった。なぜ?もう新しいの買っちゃったのに...orz
ということで、ちゃんとフォーカスが合うカメラになりました。欲しい人、かつ使ってくれるにあげます。RICOH GR Digital、800万画素、レンズはF2.8/28mm単焦点、バッテリ、充電器付き。SDカードはなし。箱、取説付き、外装キズ有。欲しい人は私に連絡するか、コメント欄にどうぞ。
2009-06-14 追記
里親は決まりました。
久しぶりにschemeでコードを書いてみた。実用のコードでは初かな。処理系はGaucheで、標準入力から数値を入力して標準偏差を計算するコード。
(define (ave-list lst)
(/ (fold + 0 lst) (length lst)))
(define (var lst)
(let ((ave (ave-list lst)))
(/ (fold + 0
(map (lambda (x) (* x x))
(map (lambda (x) (- x ave)) lst)))
(length lst))))
(define (sd lst)
(sqrt (var lst)))
(display (sd
(map string->number (port->string-list
(current-input-port)))))
リストを修正するコードの連鎖と高階関数。この感覚がLISPっぽい。
新しいカメラは届きました。
2009-06-06 追記
はぁ?LET?とか言われそうなので(誰に?)、LETなしバージョンは、sdをこうすれば良い。
(define (var lst)
((lambda (ave)
(/ (fold + 0
(map (lambda (x) (expt x 2))
(map (lambda (x) (- x ave)) lst)))
(length lst)))
(ave-list lst)))
もう誰もついてきてないか....
あと写真を追加しました。


