2005年2月10日

休日は赤なんだってば。わかってくださいよ。

nlog(n) - 休日表示カレンダープラグインというプラグインを利用させていただいていたがサーバーをお引越ししたらDate::Japanese::Holidaysがインストールされてなくて困った、困った。しかし、無いなら作る、修正する!ですよね。というのが前回までのおさらいです。今回はどのように修正したかです。(っていうかくだらん説明に興味ないという場合はここに下記修正を入れたファイルを置いておきますのでどうぞ!)

まず、休日表示カレンダープラグインをゲットします。Date::Japanese::Holidayがインストールされてる、インストールできるならばnLog(n)さんのページどおりで以上おしまい!完全なる車輪の再発明ですのでモジュールをインストールできない人以外はnlog(n)さんのプラグインご利用ください。

で、本題のDate::Japanese::Holidayがインストールされていない、インストールできない場合ですが、私のHackではTime::Localモジュールを利用しますのでTime::Localモジュールを準備してください。(これも無いとなると…)で、実際の修正ですが、jcalendarcolor.plの27行目と28行目をコメントアウト。これでDate::Japanese::Holidayモジュールを使用しなくします。そしてTime::Localを利用するようにします。

#use Date::Japanese::Holiday qw(is_japanese_holiday);
#use Date::Calc qw(Day_of_Week);
use Time::Local;

次に、本来ならばこのモジュールにて提供されていた関数2つと同じ機能を作る必要があります。

まずは簡単な土曜日の判定のほうですが。
オリジナルはDay_of_Weekと言う関数ですが、この関数は引数として日付を渡すと戻り値としてその日は何曜日ですと返す関数なわけです。
ということで、Day_of_Weekという同じ事をやる関数を作成します。実際のコードは

sub day_of_week{
my($year,$month,$day)=@_;
my ($t) = timelocal(0, 0, 0, $day, $month - 1, $year);
return (localtime($t))[6];
}

で、jcalendarcolor.plの64行目でDay_of_Weekを呼んでる所をこの新しいday_of_weekを呼ぶように修正します。

さて、次が本命の休日判定です。
Date::Japanese::Holidayで提供されているis_japanesse_holidayと言う関数は引数として日付を渡すと戻り値としてその日は祝日が否かを返す関数です。
ということでis_holidayという同じ動きをする関数を作成します。実際のコードはAddinBoxさんのサイトの祝日判定ロジックPerl版というコードを参考に微調整しました。微調整の内容は、

1. 引数を年、月、日に変更
2. 戻り値を日曜日、祝日、振り替え休日、休日だったら1、平日は0に変更
3. 曜日の算出に作成したday_of_week利用に変更

の3点です。

で、jcalendacolor.plの62行目でis_japanese_holidayを呼んでる所をこの新しいis_holidayを呼ぶように修正します。

そして作成したday_of_weekとis_holidayの二つの関数をjcalendarcolor.plに追加。
あとはpluginディレクトリに修正版jcalendarcolor.plコピーしておしまいです。ここに上記修正をいれたファイルを置いておきます。(ソースかなり汚いですけどとりあえずは御容赦ください…)

使い方はnlog(n)さんのページを参照ください。
nlog(n)さんはこのプラグインのVersion2公開してるみたいですけど、私はまだそちらには移行してません。多分似たような修正が必要かと思います。

最後にとても有益なコードを公開してくださっているnlog(n)さんとAddinBoxさん、どうもありがとうございます!!!

2005年2月 8日

無駄な時間?

ジゴちゃんが「ファイルになっている音楽しか聴かない!!」と断言するように私も最近はファイルになっている音楽しか聴いていない。(あ、風呂ではCD聴いてるな。これはこれで早急にどうにかしたいのだが…)
家ではPCでWMAでエンコードされたファイルを、外ではGigabeatに入ってるWMAのファイルを、車の中ではATRACでエンコードされてHDDナビの中に“録音”されたファイルを聴いている。
で、ふと思ったのだが、私は家でも車の中でもエンコードという同じ作業を2回行っている。(ま、家はWMAで車の中はATRACなので厳密には同じではないけど。。。)これってどうも無駄な作業のような気が…
じゃ、どうすりゃいいの?と聞かれると、それはそれでちょっと答えが無いのですが。。。

2005年2月 7日

HDDだって

我が家は自他とも認めるテレビ大好き家族です。
DVD/HDDレコーダーがそのテレビ大好き家族にもたらした革命はスゴイです!
何がすごいってどうでもいいテレビを何も考えずに録画できる点です。
なんていったって空のテープを探す必要がない!しかも、途中まで見てもそのままにしておける。
ビデオテープだと、例えば毎朝7:30からサクサクを録画予約していて、月曜の夜に朝の放送を途中まで見てほうっておくことはできないですよね。ビデオテープを取り替えるか、ちゃんと頭だししておくかしないと駄目ですが、HDDレコーダーだとそれがない!!!!!
すばらしい!