アーカイブ:  « 2007年12月 | メイン | 2008年2月 »

2008年1月25日

phpdocumentorを利用する

phpでプログラムを作成していながら、ドキュメントを残すぐらいであれば、提携フォーマットでコメントをソースに埋め込んでphpdocumentorを動かしてマニュアルを作ったほうが賢い。

インストールはpearパッケージなので簡単。
# /usr/local/lib/php4/bin/pear install --alldeps phpdocumentor

たとえば、特定のファイルをマニュアル化するのであれば、あらかじめ作成した出力先をdocとすると
phpdoc -f hogehoge.php -t doc/ -o HTML:frames:default
とすればよい。
(ディレクトリ丸ごとならば -d オプションを使う。)

ただ日本語のコメントは文字化けしてしまう。多くのサイトでは該当するテンプレート
/usr/share/pear/data/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/
にある
blank.tpl
header.tpl
index.tpl
top_frame.tpl
のcharsetを変更すればよいと書いてあるが、作成するプログラムがサイトによって異なることもあるだろうし、もともとインストールされているデフォルトテンプレートをゴリゴリ書き換えるのは気持ち悪い。

phpdocコマンドにはテンプレートで使用するファイルを切り替える-tbというオプションがあるが、どうやらうまく動いていないようなので、いっそのことテンプレートを丸ごとコピーしてそれを指定することにした。

たとえば、Shift-JISでプログラムの文字コードが統一された携帯向けコンテンツのマニュアルを作成する場合、
cd /usr/share/pear/data/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates
cp -pR default default_sjis
としてdefaultテンプレートをコピー
cd default_sjis/templates/
で移動して、

blank.tpl
header.tpl
index.tpl
top_frame.tpl
のcharsetをShift-JISへ変更する。

phpdoc -f hogehoge.php -t doc/ -o HTML:frames:default_sjis
とすると
/usr/share/pear/data/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/
ではなく
/usr/share/pear/data/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default_sjis/
以下のものが利用されるようになる。

/usr/share/pear/data/PhpDocumentor/phpDocumentor/Converters/
の中にはいろんなテンプレートがあって、PDFにしたりすることもできるみたいだ。
ドキュメントをオンラインだけでなく、紙でも残す必要がある場合には、これを使えばよさそうだ。
例)phpdoc -f hogehoge.php -t doc/ -o PDF:default:default

(※)
なぜかしら -f オプションはワイルドカードを使えるらしいがマッチする最初のファイルで処理を終了してしまう。カンマ区切りで指定できるので、複数指定する場合にはそれでやるとか・・・(面倒だけど)

2008年1月21日

SE出世双六

SE出世双六

SEの出世物語を描いた双六。キャリアパスを選んで進めていくことが出来、資格を取得しながらコマを進めていく。ITスキルがなくても楽しめるので、技術者と一緒でなくても出来るところがよいかもしれない。実際にやってみたが、ポイントがある程度ないとうまく前に進めない。そして後は運のみが左右されるようになっているようだ。

2008年1月20日

オープンソースからの転身

最近Mixiの開発者ブログを見てやっぱりオープンソースは楽しそうだなぁと思っている今日この頃。

社会人始めて以来、今の会社にはいるまでずっとオープンソースで開発された製品でもって開発したりしてきたわけで、時にはドキュメントがないことにいらだったりしつつもそれを調べるのもまた楽しかったわけで。

今の会社はベンダーの製品でもって開発しているわけだからつねに制約というものと戦っている。オープンソースで身につけた知識を持って内部構造を調べることはできてもそれに手を入れることはできない。

ベンダーから見ればリリースしている製品に勝手に手を入れられたら保証できないというのはもっともな話。ベンダーが保証した製品でもって顧客に展開しているからこそ顧客と保守契約が結べることもまた理解している。だけど製品のちょっとした使いにくさが自分のスキルでもって直してあげられればもっといいんだけどなぁ。。。

オープンソースが僕に与えてくれた刺激はとても大きいみたいだ。

2008年1月18日

SQLコマンド一覧(データベース停止編)

#SQL*Plusへのログイン
sqlplus sys/(password) as sysdba

#データベースの停止。ユーザーによるデータベースからの切断を待って終了。
shutdown normal

#TRANSACTIONALモードによるデータベースの停止。トランザクションの完了を待って終了。
shutdown transactional

#データベースの停止(即時停止)。コミットされていないトランザクションはすべてロールバックされるが、リカバリは不要
shutdown immediate

#強制終了によるデータベースの停止。インスタントリカバリの修復が必要。
shutdown abort

詳しくは@ITを参照してください。

セッションタイムアウト時間

web.xmlの<session-timeout>を確認する。デフォルトは30分。

2008年1月15日

OracleInstanceClientの登録エラー

ODBCにてOracleInstanceClientを登録しようとして完了ボタンを押すと
「ODBC ドライバのセットアップ プログラムを読み込むことができませんでした (エラーコード126)」が発生することがある。これはsystem32フォルダ内にmfc71.dllおよびmsvcp71.dllがないことが原因であるので、これらのDLLファイルをコピーして登録するとエラーが発生しないようになる。

2008年1月13日

タイムスタンプの話

Linuxでタイムスタンプでファイルを検索する話。
UNIXの部屋 検索: タイムスタンプに詳しく解説されているので、これを見ればよく理解できるのだが、通常 ls -l コマンドで時刻を出すとファイルを変更した時間(mtime)が出てくるが、ファイルの属性を変更した場合(ファイル名を変更した、権限を変更した、オーナーを変更したなど)にはその時間が反映されない。
それらの時間を変更したものを表示させるには、 ls -lc とする必要がある。

たとえば、全ファイル内で、1時間以内にファイル属性が変わったものを調べるには、
find / -cmin -60
とすればよい。

mtime, ctimeは理解できるのだが、atimeがよくわからない。ファイル内容をreadするためにはどうしたらよいのか?catコマンドで見ても駄目だし。。。

2008年1月11日

WebAlizerをインストールする(備考)

WebAlizerを別の環境(NX protection 機構が働いたマシンでSELinux有効になっているケース)に入れた際にはまったポイントがあったので、メモしておく。

1.
webalizerを起動するとファイルがあるにもかかわらず
Error: Can't open log file (Apacheのログ)
と表示される

ファイルがあるにもかかわらずこのエラーが出る場合は、SELinuxを疑ったほうが良い。
Webminから設定してあげるとうまく書き込み出来ているようなので、よく分からなければWebminから設定してみるのも良いだろう。


また、新たにディレクトリを作成し、OutputDirに指定したうえで、Webサーバーから閲覧できるようにする場合にもSELinuxが有効ならば、chconコマンドでタイプラベルを修正する必要がある。


2.
rpmbuild で警告が出るケース

make中にこんなエラーが出る場合には、RPM_OPT_FLAGSを疑ってみる。
NX protection 機構が働いている場合、
RPM_OPT_FLAGS には -O2 -g -march=i386 -mcpu=i686 ではなく
-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables
がセットされ、gccコンパイルオプションに利用されてしまう。

+ make
gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -I/usr/include/db4 -D_LARGEFILE64_SOURCE -DETCDIR=\"/etc\" -DHAVE_DB_185_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1 -DUSE_DNS -c webalizer.c
webalizer.c: In function 'main':
webalizer.c:1035: warning: suggest parentheses around assignment used as truth value
webalizer.c: In function 'unescape':
webalizer.c:1947: warning: pointer targets in initialization differ in signedness
webalizer.c:1948: warning: pointer targets in initialization differ in signedness
webalizer.c: In function 'srch_string':
webalizer.c:1985: warning: pointer targets in assignment differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of '__builtin___strcpy_chk' differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of '__strcpy_ichk' differ in signedness
webalizer.c:1989: warning: pointer targets in assignment differ in signedness
webalizer.c:1992: warning: pointer targets in assignment differ in signedness
webalizer.c:1994: warning: pointer targets in assignment differ in signedness
webalizer.c:2009: warning: pointer targets in assignment differ in signedness
webalizer.c:2015: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
webalizer.c:2022: warning: pointer targets in passing argument 1 of 'put_snode' differ in signedness
+ make
gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -I/usr/include/db4 -D_LARGEFILE64_SOURCE -DETCDIR=\"/etc\" -DHAVE_DB_185_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1 -DUSE_DNS -c webalizer.c
webalizer.c: In function 'main':
webalizer.c:1035: warning: suggest parentheses around assignment used as truth value
webalizer.c: In function 'unescape':
webalizer.c:1947: warning: pointer targets in initialization differ in signedness
webalizer.c:1948: warning: pointer targets in initialization differ in signedness
webalizer.c: In function 'srch_string':
webalizer.c:1985: warning: pointer targets in assignment differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of '__builtin___strcpy_chk' differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of '__strcpy_ichk' differ in signedness
webalizer.c:1989: warning: pointer targets in assignment differ in signedness
webalizer.c:1992: warning: pointer targets in assignment differ in signedness
webalizer.c:1994: warning: pointer targets in assignment differ in signedness
webalizer.c:2009: warning: pointer targets in assignment differ in signedness
webalizer.c:2015: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
webalizer.c:2022: warning: pointer targets in passing argument 1 of 'put_snode' differ in signedness


vi webalizer.spec で
%build
CPPFLAGS="-I%{_includedir}/db4" ; export CPPFLAGS
CFLAGS="$RPM_OPT_FLAGS $CPPFLAGS -D_LARGEFILE64_SOURCE" ; export CFLAGS
なっているところを強引に
%build
CPPFLAGS="-I%{_includedir}/db4" ; export CPPFLAGS
CFLAGS="-O2 -g -march=i386 -mcpu=i686 $CPPFLAGS -D_LARGEFILE64_SOURCE" ; export CFLAGS
へ書き換えたらうまくいった。もちろんi686プロセッサであることが前提だが。。。

2008年1月10日

webalizerを日本語表示して使う

CentOSにてWebAlizerを日本語表示して利用する(GDで描画されるグラフは日本語化されません)方法をやってみた。Webのログ解析ソフトにはAnalogもあるが、機能差についてはまた別途評価したい。

1.yumdownloadを利用するためにyum-utilsをダウンロード
yum install yum-utils

2.ソースパッケージはデフォルトではyumdownloadでダウンロードできないので、ダウンロード先を追加
vi /etc/yum.repos.d/CentOS-Base.repo

※以下をCentOS-Base.repoの最後に追加する

[update-source]
name=CentOS-$releasever - Update Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/updates/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/updates/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1

[extras-source]
name=CentOS-$releasever - Extra Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/extras/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/extras/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1

[os-source]
name=CentOS-$releasever - OS Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/os/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/os/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1

[centosplus-source]
name=CentOS-$releasever - CentOS Plus Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/centosplus/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/centosplus/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1

3.yumdownloaderにてwebalizerのソースを取得し、インストールする。インストールの際にユーザーとグループが存在しない旨の警告が出るが無視する。
yumdownloader --source webalizer
rpm -ivh webalizer-2.XX_XX-XX.src.rpm

4.インストールが正しく行われているか確認
ls -l /usr/src/redhat/SPECS/webalizer.spec

5.ディレクトリを移動してソースを修正する(configureオプションを追加する)
cd /usr/src/redhat/SPECS/
vi webalizer.spec

%configure --enable-dns --with-dblib=/lib

%configure --enable-dns --with-dblib=/lib --with-language=japanese

6.rpmをビルドする
rpmbuild -ba webalizer.spec

そうすると、db4-develがないといわれることがあるので、db-4develをインストールして、再ビルドする。もし、同じようなエラーが続く場合(gd-develやlibpng-develが該当する可能性あり)には、パッケージを繰り返しインストールする。
エラー: Failed build dependencies:
db4-devel is needed by webalizer-2.XX_XX-XX.X.i386

yum install db4-devel
rpmbuild -ba webalizer.spec

7.ビルドに成功したらrpmファイルが出来ていることを確認。アーキテクチャによっては、i386のディレクトリ名が違うディレクトリ名となることがあるので確認する。
ls -l /usr/src/redhat/RPMS/i386/

8.webalizerがインストール済みの場合には一度削除し、作成されているrpmをインストールする(webalizer-debuginfoパッケージはインストールしない)
rpm -e webalizer
rpm -ivh /usr/src/redhat/RPMS/i386/webalizer-2.XX_XX-XX.X.i386.rpm

9.webalizer.confを設定する。3項目が変更対象
vi /etc/webalizer.conf

LogFile (Apacheのログファイルの場所 Redhatのデフォルトは /etc/httpd/logs/access_log になる)
OutputDir (WebAlizerのログの書き出し先)
HTMLHead <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">

10.以下のコマンドを実行する。もし、webalizer.confで設定したLogFile以外のファイルを解析する場合には、引数にログファイルのパスをつけて同様に実行する。
webalizer

11.これをcronに登録しておけば、定期的にログが更新される。

なお、インストールするにあたり以下のサイトを参考にしましたので、ご紹介しておきます。
CentOS 4.5 でソース RPM をダウンロードする方法
Webalizer日本語表示

2008年1月 9日

ORA-28000 the account is locked

アカウントがロックされていて利用できないので、sysもしくはsystemでログインし
select username, account_status, lock_date from dba_users;
で ACCOUNT_STATUS を確認する。
なお、
alter user (username) account unlock;
でアカウントを解除できる。

W-ZERO3[es]ではじめるユビキタス生活24日目~青耳じゃなくて赤耳

23日目の日記からずいぶんと時がたってしまったが、今回はSIMカード機種変のお話。

僕の唯一のネットインフラであるW-ZERO3が契約して10ヶ月経過したのでW-OAM化しようとSIMカードの機種変を試みた。

W-OAMにすると最大128kbpsしかでない回線が最大208kbpsまででるようになる。これで気休め程度だが、ナローバンドともさよならだ(笑

SIMカードはネットインデックスが出しているRX420IN(青耳)とアステルが出しているRX420AL(赤耳)がある。青耳がアドエスのデフォルトであることから青耳を買おうと電気屋に行った。

ヨドバシでは赤耳は扱っているけど青耳はないらしい。
ウィルコムストアでは青耳の在庫はあるけどお店が少なくて機種変の機会を見つけにくい。

今日川崎に行く機会があったのでビックカメラに寄ってみた。青耳を買うはずだったのだがなぜかそのときは赤耳という言葉が脳を支配していた。機種変の手続きを終えてSIMを確認したら体が凍った。

しまった。。。機種変する機種を間違えた。。。
また10ヶ月待たなきゃならないと思うともう疲れがどっと来た。

しょんぼりしながら帰りの電車に乗っている途中RX420ALとINの違いを調べていたらさほど違いがないことが分かってほっとした。

ちゃんと下調べをしたはずだったのに、思いこみは怖いと思った。

Mixiの開発者ブログ

Mixiの開発者ブログを発見した。PerlやらMySQLのかなりコアな話があってなかなか面白い。難しいかもしれないけれど読んでみる価値はあると思う。

2008年1月 1日

cronからのメールを送信しないようにする

vi /etc/crontab にて修正する(MAILTOの先のroot指定をなくせば良い)

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=
HOME=/

なお、これでもメールが送られてくるようであれば、
LANDISK HACKING DIARYの最後を参考に標準出力とエラー出力を工夫すればよい。