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周りのコーディングも終わってしまうし、よっぽど生産性も高い。
メンテナンスも、人に頼むわけじゃないので十分。
端的すぎるかもしれないけど、使うモジュールも少ないので、性能も少しは上がるはず。