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

“phpdocumentorを利用する” の続きを読む

SE出世双六

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

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

最近Mixiの開発者ブログを見てやっぱりオープンソースは楽しそうだなぁと思っている今日この頃。
社会人始めて以来、今の会社にはいるまでずっとオープンソースで開発された製品でもって開発したりしてきたわけで、時にはドキュメントがないことにいらだったりしつつもそれを調べるのもまた楽しかったわけで。
今の会社はベンダーの製品でもって開発しているわけだからつねに制約というものと戦っている。オープンソースで身につけた知識を持って内部構造を調べることはできてもそれに手を入れることはできない。
ベンダーから見ればリリースしている製品に勝手に手を入れられたら保証できないというのはもっともな話。ベンダーが保証した製品でもって顧客に展開しているからこそ顧客と保守契約が結べることもまた理解している。だけど製品のちょっとした使いにくさが自分のスキルでもって直してあげられればもっといいんだけどなぁ。。。
オープンソースが僕に与えてくれた刺激はとても大きいみたいだ。

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

#SQL*Plusへのログイン
sqlplus sys/(password) as sysdba
#データベースの停止。ユーザーによるデータベースからの切断を待って終了。
shutdown normal
#TRANSACTIONALモードによるデータベースの停止。トランザクションの完了を待って終了。
shutdown transactional
#データベースの停止(即時停止)。コミットされていないトランザクションはすべてロールバックされるが、リカバリは不要
shutdown immediate
#強制終了によるデータベースの停止。インスタントリカバリの修復が必要。
shutdown abort
詳しくは@ITを参照してください。

OracleInstanceClientの登録エラー

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

タイムスタンプの話

Linuxでタイムスタンプでファイルを検索する話。
UNIXの部屋 検索: タイムスタンプに詳しく解説されているので、これを見ればよく理解できるのだが、通常 ls -l コマンドで時刻を出すとファイルを変更した時間(mtime)が出てくるが、ファイルの属性を変更した場合(ファイル名を変更した、権限を変更した、オーナーを変更したなど)にはその時間が反映されない。
それらの時間を変更したものを表示させるには、 ls -lc とする必要がある。
たとえば、全ファイル内で、1時間以内にファイル属性が変わったものを調べるには、
find / -cmin -60
とすればよい。
mtime, ctimeは理解できるのだが、atimeがよくわからない。ファイル内容をreadするためにはどうしたらよいのか?catコマンドで見ても駄目だし。。。

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プロセッサであることが前提だが。。。

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日本語表示

ORA-28000 the account is locked

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