ライトセラピー

風邪を引いたら睡眠障害が再発した。風邪が直った時点では、眠くなるのが午前6時で目が覚めるのは夕方。非24時間睡眠覚醒症候群(Non-24-hour sleep-wake syndrome)というやつで、毎日起きる時間がずれていく。普通の人に例えるとこんな感じ。「ある日は7時に起きないと仕事に間に合わない。次の日は6時に起きないと、その次の日は5時に起きないと、その次の日は4時に…」一日や二日なら無理も効くが、リズムがずれてしまうと辛い。

睡眠障害と季節性感情障害の治療には光療法だ。自然光では安定した効果が得られないので、明るいライトとクリップソケットとコンセントタイマーをベッドの枕元に仕掛ける。

私の場合は眠りが浅いので、朝6時にタイマーが作動するのが分かる。体はあまり動かないのでライトの方に首を向けて、30分〜1時間ほど光を見ながら体調のことを考える。最初は目が眩むので瞼を閉じているのだが、それでも眩しいくらいだ。暫くして慣れた頃に目を開ける。光を眺め続けるのは絶対に視力に悪いと思うのだが、他にいい治療法もないし仕方ない。この間ずっと意識はあるのだが、体はあまり動かない。光を眺めることで体が睡眠から覚醒するようだ。ベッドから出て暖房を入れ、トイレを済ませて水分を補給して、Web巡回とメールチェックが終わる頃には部屋も暖まっている。

睡眠障害の治療には入眠時刻と覚醒時刻の記録が必要になるのだが、考えるだけでも面倒で憂鬱な作業だ。そこでPCにはアイドル時刻を記録するスクリプトを仕掛けている。

use Win32::API;use Win32; $0=~m{*1; next if @latest<5;
	my $min=$limit;$_>=0 and $_<$min and $min=$_ for @latest; undef @latest;
	$min==$limit and ( warn("skip: min=$min\n"),next);my @lt=localtime $now; $lt[5]+=1900;$lt[4]+=1;
	my($fname,$text)=("$lt[5]$lt[4].txt",sprintf"%d-%d-%d %d:%d %.3f\n",(reverse@lt[1..5]),$min/1000);
	warn "$fname $text"; open(OUT,">>$fname") and print(OUT $text) and close(OUT) and next; warn "$fname :$!\n";
} die "signal:$exit\n";

肝心の部分には http://bitarts.jp/software/idletime.html を使わせて頂いた。

*1:?:.+?/)+)} and warn "chdir $1",((chdir $1)?"":" :$!"),"\n"; our $GetIdleTime = new Win32::API('idletime.dll','GetIdleTime','','N') or die "idletime.dll :$!\n"; our $exit; $SIG{INT}=$SIG{TERM}=sub{ $exit = $_[0];}; my($next,$limit,$now,@latest)=(time,60*1000*2); while(not $exit){ (my $now=time)<$next and (Win32::Sleep(100),next);$next+=60; push @latest,($GetIdleTime->Call(