2007年4月18日水曜日

[RSS AutoDiscovery] = ブラウザやリーダーにRSSを自動検出させる

IE7やSleipnirやFireFox2を使用していると、ブラウザの上にRSSのボタンが出ているサイトがあります。
ブラウザがHTMLをパースして、自動的にRSSフィードを発見してくれています。
そのほかにも、RSSリーダーとかでも、自動的に検出してくれます。
(厳密には、フィードを提供するファイルを検出してくれます)
これを「RSS AutoDiscovery」というらしいです。

Spleipnir2の場合(ブラウザの右下)

FireFox2の場合 (アドレスバーの右端)


ブラウザやリーダーに自動検出してもらう為には、HTMLのheadタグの中に↓の記述をすればOKです。
RSSの場合

ATOMの場合

これらの記述が、RSS-AutoDiscovery情報?として、自動検出の対象になります。
↑の記述を複数も書いても、1個しか表示されないものや、すべて表示されるようになっているブラウザやリーダーもあり、
そこらへんは、まだ厳格なスタンダードはないようです。
また、IE7ではMIMEタイプも適切なものに設定されている必要があるようです。

参考
  1. Microsoft Team RSS Blog : Windows RSS Publisher's Guide (work-in-progress)
  2. IE7 - RSS Publisher's Guide

2007年4月10日火曜日

Eclipse入門 Eclipse3.2インストール With Subclipse,Aptana,E.P.I.C

原因がよくわからないが、Eclipseがぶっ壊れたので、一から新しく入れなおした。
Java使い以外の人にも、Eclipse+Subclipse+Aptana(+EPIC)はお勧めなので、インストール方法を。
各単語の用途は、
Eclipse → Javaで作られたIDE(統合開発環境)
Subclipse → Eclipse上で動くSubversionクライアント(GUI)
Aptana → Javascript用IDE Eclipse用以外もある JS以外にもかなり使える
E.P.I.C → Eclipse上で動く Perl用IDE

インストールする環境
  1. IBM Thinkpad X40
  2. PenM 1.4Ghz
  3. メモリー 1G
  4. WindowsXP Pro
こんぐらいのスペックで余裕で動きます。
インストールされているJavaはJDK6 (JREでもOKです。)
JDK6のインストールは、↓を参考に。

JDK 6のインストールと環境設定

※Javaは、1.4以上でないとEclipse3.2は動きません。
Thinkpad X40にはIBMのJREがインストールされていましたが、アンインストールして、Sunのものを入れなおした。


  1. Eclipseのダウンロードサイトから、Eclipseと言語パック(LanguagePack)をダウンロードしてくる。
    Eclipse本体のDL DLサイト → 「eclipse-SDK-3.2.2-win32.zip」をDLする。
    言語パック(LanguagePack)のDL DLサイト → 「NLpack1-eclipse-SDK-3.2-win32.zip」をDLする。
  2. ダウンロードしてきた二つのファイルをインストールしたいフォルダに解凍する。
    「NLpack1-eclipse-SDK-3.2-win32.zip」を解凍してできたEclipseフォルダ配下の「plugins」と「features」を

    「eclipse-SDK-3.2.2-win32.zip」を解凍してできた、Eclipseフォルダ配下の「plugins」と「features」に上書きコピーする。 イメージ的には、一つのフォルダにDLしてきたものがまとまったイメージ。

    これで、Eclipse本体は日本語化されました。非常に簡単。
  3. 一つにまとまった、Eclipseフォルダ配下の「Eclipse.exe」を起動させる。

    Eclipseのロゴが出てきて、「ワークスペース」を選択する↓のダイアログが表示される。

    「ワークスペース」とは、Eclipseのプロジェクトやその設定を保存する、作業スペースです。
    デフォルトは、ホームディレクトリ配下に「workspace」ディレクトリが作成されます。
    別にどこでもいいと思いますが、Windowsで使う場合には、Windowsの乗っているHD以外をお勧めします。
    経験上、Eclipseがぶっ壊れても新しく入れなおしたEclipseから古い「workspace」を選択すれば、大体使えます。
    Eclipseのバージョンアップの場合も同じで、すべての設定は引き継げませんが、多くの設定はバージョンアップしても使えたりします。
  4. 「workspace」を選択すると、Eclipseが起動にかかります。

    ロード画面が終わると起動する。

  5. 起動したら、Eclipse本体の設定をあれこと、やる前にAptanaとEPICとSubclipseのプラグインを入れてしまう。
    Eclipseの更新マネージャーという物を利用してインストールを行います。
    「更新マネージャー」とは、URLを指定することにより、Eclipseがプラグインのインストールから、アップデートの面倒まで見てくれるという優れものです。最近のソフトウェアに大体付いてる機能ですがww。
    「ヘルプ」→「ソフトウェア更新」→「検索およびインストール」を選択。

    「更新マネージャー」が起動します。

    ここで今回は、新しくプラグイン(=フィーチャー)をインストールするので下のチェックを選択後、次へ行きます。
  6. インストールするためのダイアログが起動します。
    「新規リモート・サイト」 を選択して、名前とURLを設定します。

    今回登録するのは、「Aptana」と「E.P.I.C」と「Subclipse」です。URLは正確に、名前は適当に入力。

    Aptanaの更新サイトURL
    http://update.aptana.com/install/
    Subclipseの更新サイトURL
    http://subclipse.tigris.org/install.html
    E.P.I.Cの更新サイトURL(安定版の0.5.x系を使用)
    http://e-p-i-c.sf.net/updates
    全部入力すると↓のようになります。


    「終了」を押して進むと、EclipseによりURLの検証作業が始まります。

    検証作業が終わると、↓のインストールするものを選択する画面が開きます。

    Subclipseには「Mylar」と連携するものも含まれていますが、EclipseにMylarを入れていないとインストールできないので、チェックをはずします。
    (Mylarとはタスク管理のUIを提供するもの? 参考
    選択が完了したら「次へ」進む。

    ライセンスの確認をして、

    バージョンとインストール先の確認をすると、ダウンロード&インストールが開始されます。

  7. 注意!
    サードパーティ製のものなので、インストール中に「署名なしの~」 とダイアログが出てきますが、気にせず「インストール」を進める。
  8. インストトールが完了すると、Eclipseの再起動を促すダイアログが出てきます。
    指示に従って再起動しましょう。

  9. 再起動すれば、Aptana、EPIC、Sublipseのインストールの完了です。
    実際に、各々を動かすには、「パースペクティブを開く」→「その他」を選択して

    パースペクティブの一覧から、Aptanaは「Aptana」、EPICは「Perl」、Subclipseは「SVNリポジトリー・エクスプローラー」を選べば各パースペクティブが起動します。
  10. これで、完了。
    ダウンロードにかかる時間にもよりますが、1時間もかからないでインストールできると思います。
    これらのほかにも、Eclipseには便利機能やプラグインがあるので、コマンドラインが一番でない人とか、ほとんどWindowsしか使わない人には、Eclipseお勧めです。無料だし。






2007年4月5日木曜日

Perl O/Rラッパー使用のトレードオフ

データベースアクセスするコードを少し前に書いたのだけど、
DBとのインターフェースに何を使うか迷った。

ビジネスとかで製造するアプリとかだと、
O/Rラッパー(Class::DBI,DBIx::Classとか)や、自作のかっこいいのを使うのだろうけど、
レンタルサーバーで個人で小さいもの作る場合には微妙。

理由みたいなものとして
DBのテーブル数個、SQLは10本ちょいとかなのに、
レンタルサーバーにO/Rラッパーを導入するのは面倒くさい。
Class::DBIとかは、依存するパッケージが多いらしい(確認したことがない。)

結論として、
DBアクセスは、自作のアクセッサーを使うことにした。
二昔ぐらいにありがちな、Selectして、結果をハッシュで返すアクセッサーw
use strict;
use warnings;
use Carp;
my $conn = undef;
sub new { my $class = shift; $conn =
shift; my $self = {}; return bless $self;}
sub
set_connection { my $self = shift; $conn =
shift;}
sub get_connection { return $conn;}
sub get_statement { ゴニョゴニュキャッシュを行う。}
sub select {
my ( $self, $sql, @params ) = @_;

my $sta = get_statment($sql);
if ( @params && length @params > 0 ) {
$sta->execute(@params) or
Carp::croak($!);
} else {
$sta->execute() or Carp::croak($!);
}
my @vos;
while ( my $obj = $sta->fetchrow_hashref() ) {
my $a = bless $obj,"DB::VO";
push @vos, $a;
}
$sta->finish();
return @vos;
}

簡単に書くとこんな感じです。
connectionは、このモジュール外で作成して、作成したところでトランザクションの管理をします。
get_statmentとかは、statementのキャッシュをしてる感じです。
(statementの生成コストは高い!)

これにDAO(DataAccessObject)を作って、そこからバンバンSQLを投げ込む。
DAOにSQLは直接書き込む。

色々な意見があると思うけど、二人で作ってる小さなものに、O/Rラッパーは不要?
O/Rラッパーの設定している間に、DB周りのコーディングも終わってしまうし、よっぽど生産性も高い。
メンテナンスも、人に頼むわけじゃないので十分。
端的すぎるかもしれないけど、使うモジュールも少ないので、性能も少しは上がるはず。

2007年3月29日木曜日

Subversionのキーワード置換とかのクライアント設定全般

キーワード置換やらの設定をクライアント側で設定する。覚書。

クライアントの設定については、
configファイルとserversファイルにて管理されます。
この二つのファイルはテキストファイルで、テキストエディタにて書き換えることが可能。
(レジストリのHKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion以下に格納することも可能です。)

Windowsをクライアントに使用している場合、一番初めにSVNをコマンドラインにて
実行した時に、ユーザーのホームディレクトリのApplication Data配下に、
Subversionというフォルダが作成され、
その配下に、configとserversのファイルが作成されます。
(C:\Documents and Settings\xxxx\Application Data\Subversionという感じ)
これらのファイルはINIファイル形式にて記述されます。

serversファイルですが、
ProxyやSSLを使用する場合の記述をこのファイルに書き込めます。
今回のさくらでSubversionを使用する場合は、SSLもProxyを使用していないので記述の変更なし。

次にconfigファイルの設定変更。
[miscellany]セクションの変更

  1. enable-auto-props
    最初にインポートしたときにSubversionとしての属性を自動的に変更するかの設定。
    初期値はnoです。
    enable-auto-props = yes
    に書き換える。
    キーワード置換などは、インポートしたファイルの属性となるので、yesにして自動的に変更されるようにする。
  2. global-ignores
    svnコマンドで無視するファイルを設定できる。
    ログファイルやEclipseの設定ファイルはバージョン管理する必要がないので、ここに加えて無視するようにする。
    *.o *.lo *.la #*# .*~ *~ .#* .DS_Store はデフォルトの設定
    global-ignores = *.o *.lo *.la #*# .*~ *~ .#* .DS_Store *.log .*.html .*.htm .project .includepath

    「.*.html」と「.*.htm」はAptanaの生成するファイル、
    「.project」と「.includepath」はEclipseの設定ファイル。
[auto-props]セクション
様々な属性(プロパティ)を設定するセクション
  1. キーワード置換用の設定値(svn:keywords)
    コミット、インポート時に、時間やファイル名、リビジョンなどの動的な情報についてを、指定のキーワードと置換してくれるようになります。
    *.cgi = svn:keywords=Id Date Author Rev URL
    *.pm = svn:keywords=Id Date Author Rev URL
    *.html = svn:keywords=Id Date Author Rev URL
    *.htm = svn:keywords=Id Date Author Rev URL
    *.txt = svn:keywords=Id Date Author Rev URL
    *.js = svn:keywords=Id Date Author Rev URL
    *.css = svn:keywords=Id Date Author Rev URL
    *.sql = svn:keywords=Id Date Author Rev URL

    該当のファイルに対してどのキーワードを置換するか設定する。
    Date Author Rev URL*.sql = svn:keywords=Id Date Author Rev URL
    だと、「$Id$」、「$Date$」、「$Author$」、「$Rev」、「$URL$」の5つのキーワードを
    該当する値へ置換してくれる。
    PerlのPMファイルだとこんな風に使ってます。

    package Logger;
    =head1 NAME Logger
       $Id$
    =head1 SYNOPSIS
       For test use module.
    =head1 DESCRIPTION
    Release Date : $Date$
    Revision : $Revision$
    Author : $Author$
     Description :
    =cut
    が一番最初にインポートしたときに↓のように展開され、今後、コミットする度に新しく置換キーワードが展開されるようになる。
    package Logger;
    =head1 NAME Logger
       $Id: Logger.pm 16 2007-03-12 01:59:39Z myways $
    =head1 SYNOPSIS
       For test use module.
    =head1 DESCRIPTION
    Release Date : $Date: 2007-03-12 10:59:39 +0900 (月, 12 3 2007) $
    Revision : $Revision: 16 $
    Author : $Author: myways $
     Description :
    =cut
    もし、HTMLなら開発中はファイルの末尾にでも、コメントアウトして、
    $Id$
    とか入れておけばOK。

  2. MIMEタイプの設定(svn:mime-type)
    Subversionで見るMIMEタイプの設定
    非テキスト系のMIMEタイプを設定しておくとバイナリファイルとして扱われるようになる。
    さくらのsvn+sshでは関係ないけど、ブラウザ上からリポジトリにアクセスする場合にも
    ここで設定した値からファイルを開くアプリ等を決定する。
    *.png = svn:mime-type=image/png
    *.jpg = svn:mime-type=image/jpeg
    *.xls = svn:mime-type=application/vnd.ms-excel
    *.xlsx = svn:mime-type=application/vnd.ms-excel
    *.ppt = svn:mime-type=application/vnd.ms-powerpoint
    *.pptx = svn:mime-type=application/vnd.ms-powerpoint
    *.zip = svn:mime-type=application/zip
    *.mp3 = svn:mime-type=audio/mpeg
    このような感じで設定。
  3. EOF、改行の設定(svn:eol-style)
    コミット後にEOF、改行の扱いが重要になる場合に設定が必要。
    複数のOSによって開発を行う場合、改行コード(EOLマーカ)の扱いが異なるために、
    そこの修正などによって、差分が発生してしまい面倒なことになってしまうことがあります。
    そこで、さくらのサーバにSSHでログインしていじってインポート、コミットするファイルについて
    設定を行います。

    *.sh = svn:eol-style=native;svn:executable

このような感じで設定すれば、クライアント側の設定がすべて完了。

2007年3月21日水曜日

即席リリーススクリプトを作成した

そろそろ、上げれるものが出来てきたので、リリーススクリプトが必要になってきた。
Subversionを使用しているのに、毎回チェックアウトorエクスポートしてFTP経由でサーバーに上げるのもナンセンスなので、サーバー上で動くリリーススクリプトを作成した。

とりあえず思いついた実装内容は、

  1. Subversionリポジトリから、指定のバージョンやタグのApacheのルート部分からごっそりExportする。
  2. CGIのパスを「c:/perl/bin/perl」から、「/usr/local/bin/perl」に書き換える
  3. MySQLの設定をローカルの物から、サーバー用に置き換える。
  4. 指定したディレクトリ(Apacheが外部に公開しているディレクトリ=/home/myways/www配下)へExportしたディレクトリを置き換えるor更新されている部分だけを上書きする。
複数あるローカルの環境はWindowsなので、2番は便利になる。
3番目も、ローカルの設定は同じなので便利になる。
サーバー上でSubversionからExportするには、

/home/myways/local/bin

にパスを通して、(.bashrcで通してある)

svn export --force file:///home/myways/var/svn/myway/trunk/htroot /home/myways/work/rel/

のコマンドで、
/home/myways/var/svn/myway/trunk/htrootから/home/myways/work/rel/へエクスポートが出来る。
シェルスクリプトを作成して、引数でSubversionのディレクトリと、Export先のディレクトリを設定できるようにする。
このコマンドを、

svn export --force /home/myways/var/svn/myway/$1 $2

とすれば、
第1引数で、Subversion上のディレクトリ、第2引数でExport先のディレクトリを指定できる。
Exportしたディレクトリ、ファイルに対して、
CGIのパスと、MySQLの設定を書き換え、置き換えするスクリプトを書くのですが、
シェルスクリプトで書くよりPerlで書いた方が楽だったので、Perlで該当の処理を記述。

長くなるので、コードは割愛して、
内容は、$1と$2を引数で与えて、$1から$2へディレクトリを作成しつつ、コピーをして、
ファイルの場合コピーをする際に、拡張子を見て、「.cgi」なら、
正規表現を使って、Perlのパスを書き換える。
MySQLの設定が記述されたファイルなら、これもまた書き換えるといった内容。
コマンドはこんな感じで実行。
/usr/local/bin/perl release.cgi $3 $2 >> release.log

出来上がったシェルスクリプトは、

#!/bin/sh

LOGFILE=release.log
SVNDIR=$1
EXPORTDIR=$2
TARGETDIR=$3

rm -r $EXPORTDIR
mkdir $EXPORTDIR
svn export --force file:///home/myways/var/svn/myway/$SVNDIR
$EXPORTDIR > $LOGFILE
if [$4 = "clean"]; then rm -r $TARGETDIR fi
perl
release.cgi $TARGETDIR $EXPORTDIR >> $LOGFILE
すべて絶対パスで記述。
第1引数 Subversion上のExportするディレクトリ
第2引数 ExportするWorkディレクトリ
第3引数 Exportしたファイルを配置するディレクトリ
第4引数 cleanなら第3引数のディレクトリを一回削除してから、コピーする
即席なのでこんなもんかな・・・
ログファイルのローテイトと、ディレクトリの確認ぐらいはすればよかったかな。

これを「.bashc」に使いそうなバージョンをaliasで登録しておけばOK。
alias mwyrel="/home/myways/work/rel/release.sh trunk/htroot
/home/myways/work/rel/svn /home/myways/www"

とかしようかなw
パターンが増えてきたらrelease用にsourceするファイルを作成する。

最後にサーバ上のシェルスクリプトのパーミッションの変更を忘れずにする。
chmod 700 /home/myways/work/rel/release.sh
chmod 700 /home/myways/work/rel/release.cgi

これで、FTPは用なしです。

2007年3月20日火曜日

Apacheのファイルインデックスを表示されないようにする(.htaccess)

さくらのApacheの仕様では、
インデックスのファイル(index.html等)がなかった場合、
ディレクトリのインデックス一覧が表示されちゃいます。
また、.htaccessにてOptionsの指定を行うこともできません。
.htaccessにてOptionsを指定した場合、Apacheがエラーをはきます。

さくらのFaqにて
◎ ひみつのフォルダにあるファイルの一覧を見られないようにしたい
より、
DirectoryIndex index.html /errmsg.html
でディレクトリのインデックスにエラー用HTMLを追加する。
とありますが、一個一個HTML作るのもな・・・

さくらの言われたとおりにファイルを作るのも・・・と思たんですが、
文言考えるのも面倒だし、他のいい案が思いうかばなかった。
しょうがないので、インデックスのファイルがないディレクトリはApache経由のアクセスは
全拒否ってことで、↓の記述を追加した。

deny from all

IP選択で拒否でも、なんでもよかったのですが・・・
一応、これで見られることはなくなった。
よく考えるとApache経由で見られてこまるようなファイルを、
Apache経由でアクセスできるディレクトリに置く方がおかしいので、
さくらのFaqのような対応が一番いいのかな。

もう少し対応を考えよう。

2007年3月16日金曜日

ログインシェルをbashに変える

ググれば、即やり方が出てくるのだけども、とりあえず。

ログインシェルがchshなので、
使いなれたbashをログインシェルに変更する。

ログインしたら、
$ chsh -s /usr/local/bin/bash $USER
を入力して、パスワードを聞かれたらログインパスワードを入力して完了。
これで、ログインシェルがbashに!

.bashrcを読み込ませる為には、
.profileに.bashrcをsourceする文を追加すればOK!
.profileに↓の記述を追加する。
source $HOME/.bashrc

chshでログインしても、bashって4文字を打つの横着して作業を行っている内に、
反射でタブを押して「チッ」ってなったりするw
簡単な作業だけど、bash使う人には重要な作業。
とりあえず、.bashrcには
export $HOME/local/bin
だけ追加しといた。