Browse Month: October 2008

ネットサーフィンするということ

ネットサーフィンは楽しい、今年はなるべくたくさんの技術系や面白いブログを読むようにしてきた。人のブログを読むのはとても面白い、特にプログラマーのブログをみてみるとなんだか自分で同じようなプログラムを錯覚してしまうことがある。ブログにあるコードを読むだけでは、プログラムを書くことができない。すでに僕の fastladder には 1500 くらいのブログがあって、今現在の未読数は4万件を超えている。。。

かなり名残りおいしいけれど、毎日チェックするのは、delicious、はてぶ、The Wall Streen Journal、Silicon Alley Insider、ヤフーニュース、ぐらいにしてネットサーフィンする時間を極力減らして、今自分が求めるプログラムを書くこと(特に iPhone)、英語、ダイエット、の3つの柱でアウトプットを出していくことが必要だと思う。

前にとあるところで Mountain View の Googleplex で働いている Googler は「日本にはたくさん面白いブログがあるけれど、切りがないから読まない、必要ならググればいい!」と言ってことが印象深い。まさにそのとおりかもしれない。僕はもしかしたら、不要な情報をたくさん収集しすぎて自分の中で生かしきれていないかもしれない。

すべてのブログを読まずに、一日でブログを読む時間を30分くらいにしぼって、他のことに集中してみよう。そうしたら、また何か分かってくるはずだ。

そして、何らかのアウトプットはこのブログでアップしていきたい。

Weather Hacks for Google Gadget

雑誌の原稿のサンプルプログラムとして作成したついでに Google Gadget Editor を使って livedoor の Weather Hacks を使った、とてもシンプルな Google Gadget を作ってみた。この Google Gadget Editor はおまけてきなツールだと思っていたが、実際に使ってみるとコードのハイライトやインデントまで自動的に行ってくれて、さらに Google Gadget Editor で保存した Google Gadget をそのまま Google のホスティングで公開しているので、かなり便利。
今のところ、OpenSocial 対応の Gadget は iGoogle 上では動作しないらしいので、Legacy API で作ってみた。

JavaScript はあんまり詳しくないのでいろいろとはまったが、かなり勉強になった。Google Gadget をテストしているときは、Gadget のキャッシュがきいてデバッグが容易に進めないときは、My Gadgets を使うと便利です。

とても単純な Gadget なのでよかったら、iGoogle へ追加してみてください。

次から Gagdet を追加することができます。

.ssh/config の設定

よくサーバを追加したあと、追加したサーバで SSH でログインすると finger print を聞かれてうざくなってきた。もちろん、finger print をちゃんと確認するのがいいと思うのだけれど、再インストールしたときなども警告がでて接続できないことがあって不便だったので、.ssh/config に次の設定をしてみた。

Host *
Compression yes
StrictHostKeyChecking no

Compression は通信を圧縮する設定なのでおまけ。
StrictHostKeyChecking を設定することで回避できる、もちろん警告などはちゃんと表示されるのでいざというときにも安心だとは思う。

もちろん、鍵がおかしくて警告がでるときも接続しにいってしまうのでセキュリティリスクが伴うことは間違いない。

djbdns を導入してみた

前々から気になっていた djbdns を家のネットワークに導入してみた。

環境は、FreeBSD 7.0-RELEASE。すでに、FreeBSD 付属の bind を使っていたが差し替えてみた。

インストールは、次のコマンドで一発で OK。

$ sudo portinstall dbjdns

設定方法は、おもに Cocelo Style の記事を参考にした。daemontools を ports の依存関係でインストールしてくれるので別途インストールする必要はない。

djbdns に必要なユーザは、なぜか自動的に作ってくれないので手動で作成する必要がある。自動的にユーザを作らない理由は、設定するときにユーザを自分で指定する必要があるためだと思うけれども。


% sudo pw groupadd -n dns
% sudo pw useradd -n dnscache -c "djbdns dnscache" -d /nonexistent -g dns -h - -s /sbin/nologin
% sudo pw useradd -n tinydns -c "djbdns tinydns" -d /nonexistent -g dns -h - -s /sbin/nologin
% sudo pw useradd -n dnslog -c "djbdns dnslog" -d /nonexistent -g dns -h - -s /sbin/nologin

こんな感じでユーザを作る。

djbdns を起動するために、/etc/rc.conf に次の行を追加する。

svscan_enable="YES"
svscan_servicedir="/home/hoge/namedb"

svscan_servicedir に djbdns の設定ファイルやログファイルなどが入るので自分で指定した。指定しないときは、/var/service が使われるが自動的には作成しないので注意。svscan_servicedir は起動しない。

まず、起動する。

$ sudo /usr/local/etc/rc.d/svscan.sh start

.sh になっているとはめずらしい。

無事起動できたら、さっそく設定する。djbdns は、複数のプログラムから構成されている。詳しくは、wikipedia に書かれている。

今回設定したのは、dnscache (キャッシュサーバ)と tinydns (コンテンツサーバ)の二つ。dnscache は外からアクセスできる IP アドレス(192.168.1.1)、tinydns はサーバ内部からアクセス IP アドレス (127.0.0.1) を指定した。同じ IP アドレスを割り当てることはできないので注意。

まずは、dnscache の設定をする。具体的には example.com というドメインを内部ネットワークからの設定をする。

$ sudo dnscache-conf dnscache dnslog /home/hoge/namedb/dnscache 192.168.1.1
$ sudo touch /home/hoge/namedb/dnscache/root/ip/192.168.1
$ echo 127.0.0.1 | sudo tee /home/hoge/namedb/dnscache/root/servers/example.com
$ echo 127.0.0.1 | sudo tee /home/hoge/namedb/dnscache/root/servers/1.168.192.in-addr.arpa
$ echo 127.0.0.1 | sudo tee /home/hoge/namedb/dnscache/root/servers/1.0.0.127.in-addr.arpa

tee というコマンドを初めてしったが、man してみるとファイルに書き込みつつ、標準出力に表示するコマンドらしい。


% echo 1 | sudo tee /home/hoge/namedb/dnscache/env/FORWARDONLY
% printf "X.X.X.X\n" | sudo tee /home/hoge/namedb/dnscache/root/servers/@

二行目の X.X.X.X は上位のプロバイダから提供されている DNS を指定する。もちろん、プライマリ、セカンダリの二つを指定する。

再起動する必要はないので、起動しているか確認する。

$ sudo svstat /home/hoge/namedb/dnscache
dnscache: up (pid X) Y seconds

Y は起動経過時間っぽい。あわせて、ログも確認しておくといい。僕の環境の場合、なぜか bind がちゃんと停止していないくて Port に binding できないというエラーが出ていた。

$ sudo tail /home/hoge/namedb/dnscache/log/mail/current

次にコンテンツサーバの設定をする。

$ sudo tinydns-conf tinydns dnslog /home/hoge/namedb/tinydns 127.0.0.1
$ cd /home/hoge/namedb/tinydns/root
$ sudo vi data

data というファイルに具体的な DNS の設定をする。設定をしたら、sudo make で反映させる。

あとは、dig コマンドで動作確認するだけで OK。

ここですこしはまったが、DNS のリゾルバ /etc/resolv.conf に 127.0.0.1 と指定すると動作しないで注意。僕の場合、次のように resolv.conf を書いていて、なぜか外の DNS の解決に 5 秒くらいかかってはまった。これは、127.0.0.1 に接続できずに次の行の DNS に切り替わったため。

domain example.com
nameserver 127.0.0.1
nameserver < 上位の DNS プライマリ>
nameserver < 上位の DNS セカンダリ>

これを次のようにちゃんと設定する。

domain example.com
nameserver 192.168.0.1

自分のキャリアを考えるとき

パソナテックの10記念イベントパソナテックカンファレンス2008の最後のセッション「エンジニア・グローバル・サミット2008~世界から見た日本のキャリア、日本から見た世界のキャリア」に参加だけしてきた。思ってよりも参加人数が多くて驚いた。ディスカッションの内容は、おもに英語についてと海外に目を剥けるというテーマだった。特に Jim さんによる中国人の話はとても興味深かった。こういう話には、とても興味があるので、自分でもああいった話ができるようになりたいと感じた。

振り返ってみれば、90分というけっこう長いパネルディカッションではあったが、あったという間に終ってしまった。

パネラーのみなさんは呑みにいかれるようであったが、僕は急用があって参加できないのが悔やまれる。これからこういった場所にできるだけ参加だけではなく参画して、自分を知ってもらえたいという気持ちになった。

 

このパネルディカッションで、これから自分がやることがはっきりした。もうぶれる必要はない、まずやってみて話はそれからだ。

これから参加するセミナーには、一番前の席に座ることに意識しよう。ただし、映画館は別w。

Trac 入門

Trac入門 ――ソフトウェア開発・プロジェクト管理活用ガイドという本が発売になるようだ。

献本していだいたので、ざっくりと本を読んでみた。Trac は日頃から社内の業務ではデファクトスタンダードの BTS ツールとして使っている。

この本では、そのTracの導入する意味から実際に導入するまで、とても丁寧に解説されている本でした。

さらにTracのSubversion連携からアサインの流れまでも解説されているので、この本を読めばTracについて基礎知識は一通り得られるようになっている。

また、Trac 0.11最新版の解説もしてあるのも、とてもありがたい。

Tracのインストール方法も、LinuxからWindowsまで幅広くとても丁寧に解説されているので、この本で安心してTracを導入して使いはじめることができる。

 

ただし、ツールを導入しただけでは大きくは変わらないけれど、ツールの導入するのをきっかけに円滑にコミュニケーションをとれるように意識することも大事なことです。

 

学生時代の恩師に会う

今日は久しぶりに休みをとって学生時代の恩師に会いに行った。振り返って見ると、かれこれ8年ぶりになるだろうか、恩師は当時と変わらない様子で驚きつつ、一安心した。
久しぶりの再会であったが、まるで学生時代にタイムスリップしたような気分を味わえて、かなり有意義な時間であった。

そのあと、僕の頃から続けている研究内容について現役の学生に説明してもらった。研究内容はすっかり様変わりしていたが、当時の面影がすこし残っていた。このテーマは、ネットワークである以上とても重大な問題になってくることがあるはずなのでぜひ世の中に出るようなことになればいいなぁと思った。まさに研究というものは、時間をかけて着実にじっくりやるものだと恩師が言っていたことを思い出して、まさにそれを実現している姿はすばらしいと思った。

というわけで、久しぶりの再会に懐かしさを思えて、有意義な休日でいい刺激をいただけたのは言うまでもない。

postfix-logwatch

CentOS 5.2 x86の環境でサーバを運営しているけれど、毎日サーバから送られている logwatch の postfix のレポートが、次のように分かりくなっていて困った。どうやら、このサーバからメールが送られた分のログがレポートしてでているっぽい。


-------------------- postfix Begin ------------------------
7565212 bytes transferred
1428 messages sent
1428 messages removed from queue

Connections lost:
Connection lost while CONNECT : 151 Time(s)
Connection lost while EHLO : 1 Time(s)
Connection lost while RCPT : 8 Time(s)
Connection lost while UNKNOWN : 2 Time(s)

Unrecognized warning:
non-SMTP command from 122-116-113-159.HINET-IP.hinet.net[122.116.113.159]: GET http://www.scanproxy.com:80/p-25.html HTTP/1.0 : 1 Time(s)

**Unmatched Entries**

D8BF616482D2: to=, relay=XXX[XXX]:25, delay=0.1, delays=0.06/0.01/0.02/0.02, dsn=2.0.0, status=sent (250 ok XXX qp 11493)
... 以下続く

どうしたらものかなと調べてみると、postfix-logwatch というものがあってこれをインストールするときれいにレポートを整形してくれるようなのでさっそくインストールしてみた。

RPM がなかったので、さくっと次のような SPEC ファイルを書いてみた。

%define prefix_logwatch /etc/logwatch
%define scriptdir_logwatch %{prefix_logwatch}/scripts/services
%define confdir_logwatch %{prefix_logwatch}/conf/services
%define program_logwatch postfix

Summary: postfix logwatch utility
Name: postfix-logwatch
Version: 1.37.06
Release: 1%{?dist}
Group: Utilities/System
License: GPL
URL: http://www.mikecappella.com/logwatch/
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: logwatch
BuildArch: noarch
Source0: http://www.mikecappella.com/logwatch/release/%{name}-%{version}.tgz

%description
The postfix-logwatch utilities are postfix log analyzers that produce summaries, reports a
nd statistics regarding the operation of postfix. Either utility can be used as a standalo
ne program, or as a filter module for the open source logwatch utility.

%prep
%setup -q

%build
# removes taint mode (-T) to run under logwatch
sed -i -e '1c#!/usr/bin/perl' %{name}

%install
rm -fr %{buildroot}
install -d -m 0755 %{buildroot}%{scriptdir_logwatch} %{buildroot}%{confdir_logwatch}
install -m 0644 %{name} %{buildroot}%{scriptdir_logwatch}/%{program_logwatch}
install -m 0644 %{name}.conf %{buildroot}%{confdir_logwatch}/%{program_logwatch}.conf

%clean
rm -fr %{buildroot}

%files
%defattr(-, root, root, -)
%{scriptdir_logwatch}/%{program_logwatch}
%{confdir_logwatch}/%{program_logwatch}.conf

%changelog
* Tue Sep 30 2008 - 1.37.06
- Initial package

この postfix-logwatch パッケージをインストールしたあと、logwatch の postfix のレポートが次のようにかなり見やすくなった!


--------------------- Postfix Begin ------------------------

3.603M Bytes accepted 3,777,846
4.396M Bytes sent via SMTP 4,609,837
1.524M Bytes delivered 1,598,361
======== ==================================================

1932 Accepted 99.95%
1 Rejected 0.05%
-------- --------------------------------------------------
1933 Total 100.00%
======== ==================================================

1 5xx Reject relay denied 100.00%
-------- --------------------------------------------------
1 Total 5xx Rejects 100.00%
======== ==================================================

2220 Connections
145 Connections lost (inbound)
2220 Disconnections
1932 Removed from queue
966 Delivered
1968 Sent via SMTP

たしか、Fedora Core だとこんなレポートが最初から出ていたのに CentOS だと postfix-logwatch を使う必要がありそう。
ついでにこのパッケージを扱う puppet module も書いてばっちりです!


class logwatch {
package { [ "logwatch", "postfix-logwatch" ] : }
}