6月 162011
 

さてさて。このブログでは過去三回ほど、MRTG の IPv6 化と言うか対応について書いたことがあります。

mrtg が IPv6 で動作しない。
net-snmpd+mrtg の IPv6 化とその他もろもろ。(2)
net-snmpd+mrtg の IPv6 化とその他もろもろ。

今回は過去に検証したものについて、再度の検証を行い、実際にはどういう動作になったのかを確認してみたいと思います。

と、言うのも最近の perl は 5.14.0 になって IPv6 回りに改良が加えられました。 Socket モジュールがちょっと変更になったんですね。そして、mrtg 自体も以前からはバージョンが上がっているので IPv6 回りに改修が入ったのではないかと思い、再度の検証とするのであります。

今回利用するのは最新の ports-current です。このエントリーの一日前に csup したものを利用します。mrtg が動作するのに必要なものは以下辺りでしょうかねぇ。

    perl-5.14.0
    p5-IO-Socket-INET6-2.67
    p5-Net-SNMP-6.0.1
    p5-SNMP_Session-1.13
    p5-Socket6-0.23
    mrtg-2.17.1
    net-snmp-5.5_4

今回の検証はこれで試してみました。ports の net-mgmt/mrtg は WITH_IPV6=true で make config します。すると関連性で net/p5-IO-Socket-INET6 と net/p5-Socket6 がインストールされ、IPv6 Ready な mrtg となります。

IPv6 の機器に対応した設定ファイルである mrtg.cfg を書いて、早速 env LANG=C mrtg mrtg.cfg とかを実行します。が・・。エラーが出て動作しませんでした。

一個目は SNMP_Session.pm が以下のメッセージを出力します。長いので改行してあります。

% env LANG=C mrtg mrtg.cfg
Subroutine SNMP_Session::pack_sockaddr_in6 redefined at \
/usr/local/lib/perl5/5.14.0/Exporter.pm line 67. at\
/usr/local/lib/perl5/site_perl/5.14.0/SNMP_Session.pm line 149
Subroutine SNMPv1_Session::pack_sockaddr_in6 redefined at \
/usr/local/lib/perl5/5.14.0/Exporter.pm line 67. at\
/usr/local/lib/perl5/site_perl/5.14.0/SNMP_Session.pm line 608

 
このメッセージはエラーだと思い込んでいたのですが、ただのワーニングメッセージなので一応は mrtg は問題なく動作するようです。

しかし、インストールした mrtg コマンド、つまり /usr/local/bin/mrtg のほうが別のエラーを出力してまともに動作してくれません。エラーメッセージは以下の通り。

% env LANG=C mrtg mrtg.cfg
Undefined subroutine &main::AF_UNSPEC called at /usr/local/bin/mrtg line 2247.
Undefined subroutine &main::AF_UNSPEC called at /usr/local/bin/mrtg line 2247.

 
AF_UNSPEC が無い。と言われるんですね。このメッセージは本当にエラーなので、 mrtg はまともに動作しないので問題を取り除く必要があります。

僕は以下のように改修しました。

--- mrtg.orig   2011-06-16 15:40:42.000000000 +0900
+++ mrtg        2011-06-16 17:22:07.000000000 +0900
@@ -2244,7 +2244,7 @@
my @res;
my ($too,$port,$otheropts) = split(':', $$target{SnmpOpt}, 3);
$port = 161 unless defined $port;
-            @res = getaddrinfo($hostname, $port, AF_UNSPEC(), SOCK_DGRAM());
+            @res = getaddrinfo($hostname, $port, &Socket::AF_UNSPEC(), &Socket::SOCK_DGRAM());
if (scalar (@res) < 5) {
warn "$NOW: WARNING: Skipping host $hostname as \
it does not resolve to an IPv4 or IPv6 address\n";
return 'DEADHOST';

 
AF_UNSPEC がどこにあるのか解らないみたいなので、明示的に Socket モジュールの中のを利用するように記述しました。あと、SOCK_DGRAM も「&main には無いよ。」と言われるのでこっちも直します。しかし、他にもっと美しい改修の方法があるんでしょうなぁ。とは思いますが・・f(^^;;。

これで実行すると無事に mrtg が動作するようになりました。良かったです。

さてさて。ここまでで一応 mrtg コマンドは動作しました。実は順番が逆になっているかもしれないのですが、続いて mrtg.cfg のほうを見ていきたいと思います。

以前の「net-snmpd+mrtg の IPv6 化とその他もろもろ。(2)」のエントリーのところで Target 節のパラメータに ifIndex しか指定できない。などと書いたのですが、この点は結構重要になってきます。

ifIndex と NIC なんてのは増設すると同期が取れなくなるので ifIndex で mrtg は取得してくないですよね。今回試したのは以下の四パターン。

Target[server_bge0]: 1:public@[2001:3e0:a71::f:10]:::::2
Target[server_bge1]: \bge1:public@ipv6.running-dog.net:::::2
Target[router_gi01]: 32:public@2001:3e0:a71::f:1]:::::2
Target[router_gi02]: \GigabitEthernet0/1:public@cisco.running-dog.net:::::2

 
ふむ。以前試した時は ifDescription では mrtg で情報が取得ができず ifIndex でのみしかダメだったのですが、今回は無事に上のどのパータンでもトラフィック情報を取得することができました。インターフェースだけでなく、フツーの MIB も IPv6 アドレスでも FQDN でもどちらでもきっちり取れるようになりました。これは非常に嬉しいことですね。

あと、MRTG の公式サイト http://oss.oetiker.ch/mrtg/doc/mrtg-ipv6.en.html を見れば色々書いてありますが、FQDN で問い合せた時、当該機器の snmp が IPv6 に対応していない場合 IPv4 に fall back せずにそのまま終わってしまう件ですが、

1. EnableIPv6: yes の設定で
2. Target: 節に FQDN を書いていて
3. その機器は IPv4 にしか対応していない場合は mrtg が取れない。
4. そんな時は IPv4Only: 節を利用すると良いですよ。

と、言うことらしいです。つまりは IPv4Only: 節がある機器の場合は最初から IPv4 で mrtg が動作するみたいです。これは良かった;-)。

Target[macosx_en0]: \en0:public@mac.running-dog.net:
IPv4Only[macosx_en0]: yes

 
こんな感じで mrtg.cfg を書けば IPv4 にしか対応していない MacOSX SL の snmpd に対しても無事に mrtg が取得できます。

過去、何回かこのブログに書いた mrtg ですが、これで多分は全部大丈夫っぽいかなぁ。

いやぁ。良かった良かった。それにしても CentOS 5.6 では IPv6 対応の mrtg がまともに動作していなんだよなぁ。今回は FreeBSD で検証したんだけど、CentOS の Final でも再度検証が必要かなぁ。

と、おもーちょります。

6月 142011
 

emacs-23.3 になったら ibus.el 経由の mozc がインラインで日本語入力できなくなってしまいました。

以前のエントリで「ibus-mozc を使う。」というのを書いているので詳細についてはそっちを参考にしてください。

それにしても emacs 上でインラインで日本語入力ができないのはちょっと悲しいなぁ。と思い、ibus.el とか眺めたり、ウェブで調べてみたりしたのですが、 Vine のほうでは無事に吸収できたようですね。 FreeBSD ではそーは行かないみたい・・。

ちなみにインラインで日本語が入力できると何か嬉しいかと言うと、Ctrl や Esc キーなどがかな漢字変換システムに食われることなく emacs のキーバインドが利用できる点ですね。これは実際にやってみると結構重要です。

なので、他に何か別の emacs で利用できる日本語入力無いかなぁ?とか思い調べてみたら、mozc 自体が emacs lisp として mozc.el というのを提供しているのねぇ。

早速試してみました。が・・。
mozc 関連の FreeBSD の ports としては japanese/mozc-server 、 japanese/mozc-tool があるのですが、このどちらでも mozc.el をインストールしてくれない。きっと ports の作者さんは emacs との関連性をつけるのを嫌ったのでしょうなぁ;-P。

mozc のソースの中に unix/emacs/mozc.el があります。が、こいつは mozc_emacs_helper という、同じディレクトリにあるソースをコンパイルしたものをインストールしてあげないと動作しないんですな・・。orz。

ちゅーこって mozc-emacs とか言う ports を作りましたよー。そもそも、mozc のコンパイルは python を利用しているので非常にややこしい。試行錯誤した結果 mozc のソースツリーで以下のコマンドをたたけば mozc_emacs_helper の make ができます。

# setenv BUILD_COMMAND gmake
# ./build_mozc.py gyp
# ./build_mozc.py build -c Release --qtdir= /usr/local/lib/qt4 \
unix/emacs/emacs.gyp:mozc_emacs_helper
# cp out_linux/Release/mozc_emacs_helper /usr/local/bin/
# cp unix/emacs/mozc.el /usr/local/share/emacs/23.3/site-lisp/

 
これで mozc.el が動き出します。あ。当然 GTK_IM_MODULE 環境変数などの設定は必要ですよ。
僕の場合、emacs 以外は ibus-mozc を利用するようにして、 emacs からは ibus 経由ではなく、直接 mozc と通信できるように、あとで下のほうに出てきますが ~/.emacs に設定しました。

で、これらをやってくれる ports は以下に置きました。

http://icmpv6.org/Prog/FreeBSD_ports/ports-mozc-el-20110614.tgz

基本的には emacs に関連した部分のみを切り出したので mozc-el と言う ports にしました。ports/textproc 辺りに展開してください。 mozc_emacs_helper を make してインストールしてくれます。あと、 mozc.el と mozc.elc をインストールします。関連性で editor/emacs が必要がです。
また、当然ですが、 make deinstall にも対応しています。

で、~/.emacas への設定ですが、以下のような感じでしょうかね。

(require 'mozc)
(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")
(global-set-key (kbd "C-o") 'toggle-input-method)

 
早速入力してみると。おぉっ!! ちゃんとインライン入力ができますね。すげー。試しに emacs -nw な状態でも試してみましたがこちらでも日本語入力ができます。ibus-mozc よりもちょっと良い感じです。

 
さてとー。僕の場合、もう何回もここに書いていますが、かな入力の人なんですよ。で、その設定はあるのかなー?とか思って色々調べてみましたが、今の段階では mozc.el にはカナ入力の設定は無いみたいで、mozc.el には 「;; TODO(yuizumi): Supports Kana input.」などと書かれていました。orz。

通常、mozc の設定は mozc_tool_config で、行うのですが、ここではちゃんとかな入力になっているのですが、やはり ibus.el もそうですが emacs lisp の側でも何かしら対応しなければならないんでしょうなぁ。

 
と、言うことで、かな入力の僕にはいまいちご利益が無いのですが、ふつーにローマ字入力をする人にはベタに mozc が利用できるのと、あと tty 上の emacs でネーテェブというかインラインで日本語入力ができるというのは非常に嬉しいことではないでしょうか。

是非とも ports になってもしくは ports からインストールできるようになって頂きたいものだと、僕は思いました;-)。

6月 122011
 

「CPUコレクション」の第37回目は Socket370 の Celeron です。前回掲載した PentiumIII の Celeron 版になります。そう言われてみると、Intel は Socket370 において、PentiumIII と Celeron は綺麗に両方とも出していた。と言うことになるんですね。

Socket370_Celeron_2_1.jpg

パッケージは前回掲載したものと一緒で黒い、色々書いてある部分が上と下の両方にあります。

こっちのは下のみに色々書いてあるんですけどもね。

この二つは同一コアなはずなんですが、ヨクヨク見てみると、ベースクロックが違うんですなぁ。前に掲載した PentiumIII と Celeron は 100MHz、今回掲載するシリーズのは 133MHz。Intel は、コアは一緒なんだけど、ベースクロックを変えたのでデザインもちっくと変更した。と、言うことなんでしょうかね。
って・・。全然違うか。PentiumIII は 133MHz、Celeron は 100MHz か。やっぱり違いがよーわーらんf(^^;;。

こっちは裏側です。

Socket370_Celeron_2_2.jpg

Coppermine コアは全てにおいて裏にデコボコがついているですね。しかし、 CPU によって微妙に付いている数が違ったりして。裏だけで、CPU 当てゲームができるような気がします;-)。ただ、今回のは PentiumIII と Celeron の区別が中々難しい。ポッチの違いだけかな。

さてさて。このシリーズの CPU だけどういったタイプなのかちょっと解らなかったのですが、まだまだ Socket370 は続きます;-)。

6月 072011
 

僕は Intel MacBook を 2009 年に購入して、現在利用しているのですがもつい最近 Apple から

MacBook の下部ケース交換プログラム

と、言うのが発表されました。

上記 URL のページをたどるとシリアル番号を入力するページにたどり着くので、そこで自分の MacBook のシリアル番号を入れてみると・・。あれま。サクっと交換してくれる画面に飛びました。と、言うことは、僕の MacBook は交換対象の機器ということか。

と、言うことで本日交換してみました。あ。しかし、上記 URL の下のほうには「注:お使いの MacBook にこの問題が見られない場合は、ご注文手続きをしていただく必要はありません。」って書いてあるんですね。見事に読み漏れていました・・。どうもすみません・・。

Apple から荷物が、クロネコヤマトで届きました。交換したパーツは Apple に送り返すらしいので、配達の人が待っている間に交換して以前付いていた裏ぶたは配達員さんが持って帰るようです。

しかし、家に居ないのでそれはちょっち無理ですね。先に交換して後日取りに来てもらうことにしました。

Apple から届いたものはこんな感じ。

IMG_1281_mac_urabuta_1.jpg

中に入っていたのは以下のような感じ。

o. 在宅自己交換修理サービスのご案内
o. 交換の手順書(二枚・八カ国語)
o. ねじ 8 本
o. ドライバー

これらを参考にして作業の開始です。

IMG_1284_mac_urabuta_2.jpg

これが届いた新品のバーツ。

付属のドライバーで MacBook の裏ぶたを外して作業開始。ねじ八本抜いてから真ん中辺りで止まっているのをパコンと外します。すると BacBook の中身が現れます。

IMG_1287_mac_urabuta_3.jpg

今回は HDD 交換するわけでも、メモリ増設するわけでもないので眺めるだけ;-)。すかさず新品の裏ぶたをパコンとはめてねじで固定して作業は完了するのでありました。

その後、電源を投入して無事に起動することを確認して作業は完了するのでありました。

後は交換したパーツを Apple に送り返すだけなのであります。

6月 032011
 

いやぁ。普段はテレビを見ないんだけど、REGZA 買っちゃいました。37 インチのやつ。一応はフル HD;-)。

最近のテレビ番組は面白いとか楽しいとかあまり思わなくなって来ているんだけど、大画面のディスプレーとして映画みたりする感じでしょうかねぇ。

DVD とかブルーレイの再生機器は持っていない(PSP は持っているけど DVD+R の二層式が再生できないのでいまいち使い道が無い・・。orz)ので PC から HDMI ケーブルを接続して PC のサブディスプレーとして DVD を再生したりしています。

後、僕は、もう結構古いモノなんだけど YAMAHA のホームシアターセット TSS-1 を持っているのでコイツを REGZA に接続して 5.1ch を楽しんでいます。 REGZA 側は外部出力 S/PDIF に対して PCM を選択すると一応 5.1ch で音が出るので DVD がソコソコ楽しめます;-)。

と、言う感じで PC との接続は特に問題は無いです。ただ、僕の買った REGZA 37Z1S は D-SUB 15-pin が無いので NotePC とかは変換ケーブルをかまさないとディスプレーがつなげられないのがちょっと悲しいところかな。

と、言うことで本題。

以前のエントリーで「iOS4.3.0 のホームシェアリングで iTunes 共有。」と言うのを書きました。ネタ的にはそれと全く同一って感じです。済みません・・。

ONKYO の ND-S1 に iPhone4 を接続して iTunes 共有すると動画も転送できます。

DVD は PC で見るから良いけど、iTunes に入っている動画(つまりは iPhone3G,4 に最適化してバックアップしたものたち)をたまには見たいときがあるわけですね。それらを iPhone4 でホームシェアリングして、REGZA の大画面で見るという感じです。

IMG_1275_REGZA_1.jpg

ONKYO の ND-S1 には画面出力のコンポジットがあるのでそれを REGZA に接続します。後は REGZA 側での[入力切換]ボタンでコンポジット入力を選択するだけです。ちなみにこの時、音は ND-S1 を接続している CR-D2 のスピーカら出ます。まぁ、もとのコンテンツは 5.1ch に対応していないのでこのさいステレオ 2ch で十分でしょ。みたいな感じです。

一点だけ注意が必要なのですが、 ND-S1 と iPhone4 をダイレクトに接続しないと映像が ND-S1 に届きません。

僕は ND-S1 と iPhone4 の間を延長ケーブルで接続してよく使っているのですが、安っちぃケーブルを利用していると映像線が無いんでしょうな。画像が出ないのであります。

ケーブルはこんな感じ。

IMG_2368_REGZA_2.jpg

アキバに行くと 500yen くらいで売っている ドックコネクタ延長ケーブル みたいなヤツです。これで映像までちゃんと引っ張ってくれるケーブルって世の中にあるのかなぁ?

と、言うことで、動画を見るときはしっかりと iPhone4 を ND-S1 のドックコネクタに接続したほうが良いでしょう。

それにしても、当初はどうやって MacBook と REGZA を接続しよう。やっぱり DVI->HDMI 変換した後に DHMI ケーブルを伸ばすかなぁ。なんて考えていたのですが、やっぱり今回も iOS のホームシェアリングの機能に救われたっ!! って感じでしょうか。ふむふむ。

けど、そーすると AppleTV とか必要ないのかなぁ? iOS のホームシェアリングの機能は iTMS からレンタルした映画も飛ばせるのかなぁ? 今度試してみよう;-)。

5月 292011
 

「CPUコレクション」の第36回目です。今回も Socket370 の登場です。しかし、この CPU は良く解らないのであります。

Socket370 の Core は Katmai -> Coppermine と来て、この後登場する Tualatin となるはずなんですが、ではこの CPU は一体何?となるのであります。

まぁ、この辺り、僕自身は AMD の CPU を使っていたので Intel の CPU には疎かったと言う事情があるかとは思いますが・・。

なにはともあれまずは写真を掲載しましょう。

Socket370_PentiumIII_2_1.jpg

前回の 34 回の時に掲載した CPU とは明らかに、見た目が違うんですね。

これはただ単に、Intel が CPU クロック up したのでいっそことデザインも変えてしまえーっ!! などと思っただけなのでしょうかねぇ?

もしくは僕が全然全く Socket370 を解っていないだけなのでしょうか?
この辺りの事情通の方いましたら、是回お教え頂けませんでしょうか。

こちらが CPU の裏側になります。

Socket370_PentiumIII_2_2.jpg

ブツブツが付いている感じですなぁ;-)。 34 回の時の PentiumIII よりも二個少ない。

Socket370_PentiumIII_2_3.jpg

そして、このデザインの CPU も PentiumIII と Celeron の両方が存在しているんですな。

5月 202011
 

さてさて。「CPUコレクション」の第35回目です。前回から Socket370 になっています。今回登場するのは Coppermine コアの Celeron です。

Socket370 は Katmai コアの Celeron が初めて登場し Slot1 は終演を迎えるのでありますね。この CPU はそういった意味で言えば Socket370 の二個目の Celeron と言うことになるかと思います。

あわせて、パッケージも PPGA から FC-PGA になった版ですね。

Socket370_Celeron_FCPGA_1.jpg

見た感じも PentiumIII と特に変わるところは無いようです。

こちらは CPU の裏側です。

Socket370_Celeron_FCPGA_2.jpg

PentiumIII とは違って、数個のコンデンサが存在していないですね。本当にこの飛び出ているのかコンデンサなのか、僕は詳しく知りませんが・・f(^^;;。けど、こうやって並べて観察してみると細かいところの違いまで目について中々おもしろいですね。

この辺りの Socket370 は 会社の廃棄 PC と言うか、サーバから頂いてきたものがほとんどでしょうか。ただ、PentiumIII があっても Celeron が無かったりしたので何個かはアキバでジャンク扱いで買ってきたモノもあるような気がします。

それにても Socket370 な CPU ってのは変なんですよねぇ・・。この後、まだまだ続きますが色々なタイプがあるんですなぁ。

5月 122011
 

ちょっとわけあってカレンダーをホゲっているんですが、祝日管理というのが大変に面倒であることが判明した。 perl でホゲっているのでウェブで探したり、モジュールを検討したんだけど、どうもしっくり来ない。祝日が変更になるとソースコードを改変したり、モジュールをインストールしなければならなかったりで、ずっと保守がつきまとう・・。orz。

何かないかなぁ?とか探していたら google カレンダーの API を叩いて祝日をゲットして来る。ってのを見つけたけど XML のパースとか、どーもやることが多すぎる。他に何か無いかなぁ。とか探したり、手段を見つけようとしてます。あ。そー言えば、僕、ical サーバ作ったじゃん。てのを思い出したので、ical サーバから情報持って来られないか調べたけど、ちょっとダメっぽい。

それならば。と思いついたのが、ics ファイルをパースするサブルーチン作ってしまえ。ってことで非常にオオチャクな発想をしてしまったのであります;-)。

まず、Apple のサイトから日本の休日カレンダーを取ってきます。MacOSX のアプリとして iCal があり、それ用に提供している ics ファイルがたくさんある URL があります。

iCal カレンダーライブラリ

ここから日本の祝日用カレンダーを2,3ヶ月に一度 cron で持ってくるようにします。祝日はそーそー更新されることは無いと思うので頻度は低くて大丈夫。

そして、Apple が提供している情報は多分 iCal アプリがある間は公開し続けてくれるだろうと勝手に思っているので安心感がある;-)。

% ftp -a http://ical.mac.com/ical/Japanese32Holidays.ics

  さてと。これで絶えず最新の祝日情報がゲットできました。あとはこれをパースして祝日を抽出すれば良いだけですね;-)。
僕の書いたサンプルコードはこんな感じ。もっと美しくかける方いましたら絶賛募集中;-)。
 
#!/usr/bin/perl
use strict;
use Date::Manip;
# ## main # my $date = shift; if ($date) { my $data = &holiday_check($date); print $data ."\n\n"; } else { for (my $mm = 1;$mm < 13;$mm++) { for (my $dd = 1;$dd < 32;$dd++) { my $date = "2011" . sprintf("%02d",$mm) . sprintf("%02d",$dd); my $data = &holiday_check($date); print $data ."\n" if ($data); } } } exit 1;
# ## 祝日のチェック # sub holiday_check { my $date = shift; my $name = ""; my $day = ""; my $f = 0;
open(CAL,"<./Japanese32Holidays.ics"); while( my $line = <CAL> ) { $line =~ s/\r\n//g; chomp $line; $f = 0; if ($line =~ /^BEGIN:VEVENT/) { while( my $line = <CAL> ) { $line =~ s/\r\n//g; chomp $line; last if ($line =~ /^END:VEVENT/); # 日付が決まっている祝日の場合はそれを利用する if ($line =~ /^(DTSTART;VALUE=DATE:)/) { $line =~ s/$1//; $day = $line; $f = 1 if ($day eq $date); } # 祝日名を取得 if ($line =~ /^(SUMMARY:)/) { $line =~ s/$1//; $name = $line; } # 祝日法で決まっている祝日の情報の取得 if ($line =~ /^RRULE:/) { my $yy = substr($date,0,4); my $mm = ""; my $dd = ""; my @tmp = split(";",$line); foreach my $a (@tmp) { # BYMONTH は何月かの情報 $mm = $1 if ($a =~ /BYMONTH=(.*)/); # BYDAY は月曜日が祝日の時の計算 # 今のところは月曜日しか無いので MO の狙い撃ち # 祝日法が変わったら改修しようね;-)。 if ($a =~ /BYDAY=(.*)MO/) { $dd = $1 ; my @a = ParseRecur("*$yy:$mm:$dd:1:0:0:0"); my $d = substr($a[0],0,8); #print "@a,$a[0] : $date,$d\n"; if ($date eq $d) { $f = 1; last; } } } # BYDAY が無い RRULE の場合は DTSTART の月日を利用する unless ($line =~ /BYDAY=/) { my $datesv = $date; my $d = substr($datesv,4,4); if ($day =~ /$d$/) { $f = 1; last; } } } } last if ($f); } } close(CAL);
my $data = ""; if ($f) { $data = "$date : $name "; } return($data); }

 
このプログラムを CheckHoliday.pl として保存して、実行する場合は以下のような感じ。

 % ./CheckHoliday.pl 20110718
20110718 : 海の日 (Marine Day)

 
スクリプトの引数に YYYYMMDD を指定します。その日が祝日であった場合にはその名前を表示します。日付を指定しない場合は 2011 年の祝日全てを表示します。メインのほうは皆さんの環境に合わせて作ってください。今回はサブルーチンのほうがメインになります。

このスクリプト、ちょっと解説すると以下になります。

1. 基本的には VCALENDAR 形式の ics ファイルをパースします。
2. 振替休日 など、日付が固定しているデータは DTSTART を参照します。
3. 海の日 など、第二、三月曜日が休みな場合は RRULE の BYDAY を見ます。
4. RRULE に BYDAY が無いヤツは国が日付を決めた祝日なので DTSTART の MMDD のみを参照します。

これで祝日の情報を取得します。Date::Manip モジュールの ParseRecur は第何週の日付を返してくれるモジュールでこれが非常に助かりました。

と、言うことで、日付を与えればその日付が祝日であれば値を返す。と言うサブルーチンの完成です。

速度的にみると 20110101 から 20111231 までを調べるとだいたい 1.5 秒くらいかかりますかねぇ。ちょっと重いか?

良かったら参考にしてください。あ。もっと綺麗なコード、絶賛募集中です;-)。

5月 092011
 

いやね。最近 ports-current から csup して来て portupgrade -arR すると graphics/netpbm だけコンパイルエラーになって make が完了しなかった。

その後「今インストールしてあるやつを先に deinstall しろ。」ってメッセージが出力されるようになったのでその通りに試したら、おぉっ!! ちゃんと make が完了してインストールできるようになった。ヨカッタヨカッタ。

しかし、サーバ上で graphics/netpbm をインストールしようとしたらなんとこいつは libX11 などと言う、サーバにはまぁるで関係のないライブラリと言うか ports をインストールするようになっていた。アイタタタタ・・。orz。

ちょっと前までは netpbm-10.26.64 と、言うバージョンをインストールしていた。csup したら netpbm-10.35.80 をインストールしようとする。こいつがなんとっ!! X11 の ports をガサゴソとインストールしてくれちゃうんですな。 graphics/netpbm/Makefile を眺めても USE_XORG= x11 なんて書いてある。でもってどう見ても WITHOUT_X11=yes ってのが有効にならない・・。

サーバで X は要らんだろう。ということで irc の皆さんと話したり色々調べたりした結果どうやら /usr/local/bin/pamx というのが X のライブラリをリンクしているのを発見。ソースコード的には netpbm-10.35.80/other/pamx。 こいつは 10.26.64 のころには存在しないソースなわけね。

では pamx は何をするコマンドなのか調べてみたら、画面にイメージを表示するコマンドみたい。X-Window の壁紙設定コマンドみたいな感じかな。そんなの既にたくさんあるのでわざわざ netpbm で車輪の再開発することもなかろうに・・。などと思ったのであります。

と、言うことで、 graphics/netpbm の make 時に make WITHOUT_X11=yes と指定できる Makefile を用意したので X11 が必要無い環境で netpbm を利用する方は参考にしてみてください。

http://icmpv6.org/Prog/FreeBSD_ports/ports-netpbm-10.35.80_WITHOUT_X11_Makefile

WITHOUT_X11=yes を指定すると pamx を make、install しないので X11 のライブラリは要らなくなるようにしています。 ただ、 pkg-plist はいじってないので make deinstall 時に実際にインストールされなかった bin/pamx が無いよ。と言われますが、まぁ、その点は許してください;-)。

ちなみに僕はサーバ上で graphics/netpbm を利用していますが、ひとつは photo_gallery を利用しているため、もうひとつは、日本道路交通情報センターの交通情報の画像を取ってきて携帯電話からアクセスして表示できるように 90 度傾けたりサイズを変更したりするために利用しているのであります。

サーバ上では X11 は要らん。しかし graphics/netpbm は利用しているのであります;-)。

5月 022011
 

こんにちは。世間はゴールデンウィークですが、皆様いかがお過ごしでしょうか。「CPUコレクション」の第34回です。前回の AthlonXP Barton コアで AMD の CPU も一段落したので Intel 系 CPU の系譜をなぞっていって見たいと思います。

前回掲載した、自分で利用した Katmai コア の Celeron 以降、 Intel CPU は購入したことがありません。ただし、会社で利用している PC サーバのほとんどが当時としては PentiumIII が主流だっのではないでしょうか。

こんな感じで今回登場するのは Coppermine コアの PentiumIII。Katmai コアで Socket370 の PentiumIII って存在していないですよねぇ?持っていないんですけども。

Katmai コア の Celeron は PPGA、Coppermine コアの PentiumIII および Celeron は FC-PGA。共にどちらも Socket370 なのに非互換なソケット。こらー納得いかんっ!!

Socket370_PentiumIII_FCPGA_1.jpg

AMD の Athlon CPU と一緒でコアが剥き出しの状態の CPU となっています。その割りには「コア欠け」って言葉を聞きませんでしたね。

コアにヒートスプレッタなどが無いのでパッケージの上下の黒い部分に CPU の情報が書いてあるのて
あります。

こっちが裏側です。

Socket370_PentiumIII_FCPGA_2.jpg

表側がペロっとしている分、裏側はゴツゴツしているですね。けど、まぁ、CPU の上にはクーラーが乗るのでまぁ、そんなことはどうでも良いか。とわ言いつつ、コレクションとして持つと大体こんな感じなります。

ちなみに同じコアの Celeron と並べるとこんな感じ。

Socket370_PentiumIII_FCPGA_3.jpg

上にも書きましたが、PentiumIII というのは自分で購入して利用したことが無いのであります。今回から数回に渡り Socket370 に突入していきますが、会社の廃棄 PC から頂いてきたり、それで足りないときにはアキバのジャンク屋さんで見つけてきてなんとか全種類揃えた。と言う感じなのであります;-)。