2008年1月29日火曜日

さくらサーバとCatalyst

Paggerが入ったので、動作確認と併せてCatalystを仕込む。

有用な参考情報はここ

単純にモジュール入れるだけでは、動作しないとのことでした。


下準備

アプリケーションの場所はuserディレクトリのwww以下でないところに作成。
  • CPANモジュールは~/perl/lib(/home/username/perl/lib)がインストール先
  • アプリケーションは~/(アプリ名)(/home/username/(アプリ名))に作成

【手順】
  1. CPANからTASK::Catalyst入れる。(所要時間はおよそ30分と長め)

  2. DB作成(今回は"さくらサーバ"に既存のMySQL利用)

  3. Catalystのアプリ作成
    (→テストの為、簡単なHello表示されるもの)
    3-1 ワークディレクトリで catalyst.pl (アプリ名) でアプリ作成 
    3-2 scriptディレクトリにて script/(アプリ名)_server.pl でアプリ起動&停止はCtrl+C

  4. ~/www周辺のファイル設定(ディレクトリいじり&Apacheへのアクセス)

  5. http://www(登録ホスト名参照).sakura.ne.jp:3000/でWebアプリが表示されればOK

ほとんど参考ページ通りだったので、その差異だけ。。

ページには
  • script/myApp_cgi.plの書き換え

  • シンボリックリンクの作成

  • .htaccessの作成

の手順があったのが、始めの(アプリ名)_cgi.plのファイルはいじらなくてもエラー出ませんでした。

シンボリックリンクがあればhttp://(username).sakura.ne.jp/に行った際、ディレクトリ構造の中に~/www/script ができる。

.htaccessファイルを作成して、FTPで~/www/下へアップ。(大・小文字は気をつける)


「.htaccessファイル」

AddHandler cgi-script .pl

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/Hello/?script/hello_cgi.pl
RewriteRule ^hello/(.*)$ script/hello_cgi.pl/$1 [PT,L]

以上、http://www(登録ホスト名参照).sakura.ne.jp:3000/へ遷移後、「Hello on Catalyst 5.7012」のページが表示されたらCatalyst起動確認完了。

さくらサーバとPlaggerインストール

初めてのFreeBSD、、ちなみに"さくらのレンタルサーバ"(月々¥500、1GB、その他サービス込み)はお得と思う。

で、Plaggerのインストール。

これを済ませておけば、後々遠隔(cronの機能とかで)自動RSS or メール配信が可能になるから。

まずはここからスタート。


【手順】
さくらサーバのユーザ領域では、やりたい放題できないようだが、やり方は迂回してで何通りかあるらしい(subversion とかBSDPANなど?他の情報はこちら)。


自分の場合は慣れたCPAN経由で実行。

  1. MyConfig.pmの修正
  2. CPANのインストール 
  3. Plaggerのインストール

先に挙げたサイト通りにつまづくところ(※)もありで、半日くらいかかった。


【※自分の嵌ったポイント】

・FreeBSDは"UTF-8"では起動時にコマンドエラーが発生した、"EUC"で修正対象ファイルを上書きしたら治った。

下記は参照URLを見ながら順に解決。
・ Template が入らない
・ DateTime::TimeZone、DateTime::Format::Mail が入らない
・ Encode::Detect が入らない

「Module::Build が古いのが原因でオプションが認識されない」の部分は巧妙で、ここで先に"Build.PL"を自力インストールしておくと、つまづいた箇所が解決することがあった。
(今回はXML::Feedの一部でインストールできなかったところが、この過程ですっきりした。)


・全モジュールのインストール後、Plagger -v でplaggerの起動を確認したら、「Not Found Command」が表示された。

→これは調べても検索されず、ローカルで起動させたように強引に"plagger.bat","plagger.pm"をコピーして適当なディレクトリに収めたら、正常に反応するようになった。
ただ、そのままコピペではなくPerlのバージョンにあわせた修正を施すのも必要だった。

"plagger.bat"
/home/(user)/local/bin

"plagger.pm"
/home/(user)/local/lib/perl5/Plaggerへ
以上で、plagger -v でバージョン表示OKでした。


~追記~


"plagger.pm"のエラーに

Can't locate Plagger.pm in @INC (@INC contains: /home/~

とか

Can't find package from /home/(ユーザ名)/local/lib/perl5/Plagger/Plugin/Plagger.pm at /home/(ユーザ名)/local/lib/perl5/Plagger.pm line 180.

とか出たら環境変数の設定(参照)、plagger.pmファイルの格納アドレス、plagger.pmファイルの文字コード(自分の場合はEUC-JP)を突き合わせてみる必要がありました。
(自分もplagger.pmファイルは/home/(ユーザ名)/local/lib/perl5 へ置くことに)

環境変数を修正後は
source ~/.cshrcで環境変数読み込み、Plaggerの起動確認をします。

2008年1月23日水曜日

Oracle9i インストール備忘録

XAMPPの障害でMySQL抜こうとしたら、システムに張り付いて外れなかった記憶が甦る。。

 以下、Oracle 9i インストール備忘録。9iな訳は都合です。。

既に10gも落ち着いているこのご時勢。
探せば情報源は沢山転がっているので、肝のところのみ。

  1. ダウンロードしたフォルダをC: 直下に移動。デスクトップ上ではインストールウィザード起動しないこと。
  2. 1.のinstallフォルダ内"setup.exe"を実行する。
  3. デフォルトのまま次へ~で平気。ただ、一度失敗して再インストールするとホーム名が違っているので注意。

  4. インストール後、「コンピュータ」右クリック→「サービスとアプリケーション」→「サービス」で、"Oracle"にまつわる全てのサービスメニューを停止しておくこと。(ここで停止せずにパッチあてようとするとエラーが頻発し、"設定失敗"と表示される。)
  5. C:直下に移動しておいたOracle patchセットのinstallフォルダ内の"setup.exe"を実行。
  6. あとは次へ~で終了、付随のアプリが正常起動することを確認。

一度インストールに失敗して、の話しもあったので、アンインストールについても下記にて列挙。

  • アンインストールの順番は「①インストール時同様、Oracle系統のサービスを全停止→②ウィザードからファイル群を削除→③C: や周辺に(userのtmpフォルダ内に隠れてたりする)あるOracle関連のフォルダを削除→④「ファイル名を指定、で"regedit"を入力して開いたレジストリをからOracle関連キーを削除(ただしこれは厳重に注意)」」

  • ②では、パッチあてたならパッチフォルダからUniversal Installerウィザードを起動して削除すること。
  • ④は②完了時点で大体消えているOracleキーのファイルの残りを消していくもの。

という感じでした。。

一度インストール失敗してて、そこから挽回しようと画策してたら時間を浪費してしまった。
TNSのエラーとかの知識が身についた分、無駄でなかったけど。

2008年1月20日日曜日

Wiiリモコン

WiiリモコンのBlueToothと戯れる。。

昨日PM4:00にAmazon発注、本日PM5:00に到着。
Amazonグッジョブ。


導入方法は下記参照
http://muumoo.jp/news/2007/05/02/0wiiremote.html
ソフト→http://onakasuita.org/wii/




これを用いて、SecondLifeなど今後検証予定。

2008年1月18日金曜日

plaggerとケータイ

ここ
①http://www.area51.gr.jp/~rin/diary/?date=20060920#p05
と、
ここ
②http://d.hatena.ne.jp/s_nobu/20060905/1157451726


を参照しながらケータイにplaggerでRSS配信できるかチェック。

まず①URLで流れを確認。

次に②で「Publish::Iso_2022_jp_mail」と「Filter::FormatText」をそれぞれコピペ。

それぞれ
 
 ・C:\Perl\site\lib\Plagger\Plugin\Publish\Iso_2022_jp_mail.pm
 ・C:\Perl\site\lib\Plagger\Plugin\Filter\FormatText.pm
 
のファイル名にして配置。

次に、config.weather.yamlを自分用(mailto:部)に修正。。

実行。

HTML::WikiConverter欠け→CPAN起動で補填
Jcode欠け→(同上)

再び実行。

Can't use string ("Filter::FormatText") as a HASH ref while "strict refs" in use at ~Plagger.pm line 199, line 855.

のエラー発生

MovableTypeサポートで同様なメッセージの際は、アクセス権限を設定とかある。

HASHの扱いならこのように配列自体を直すとのこと。

(以下、日を改め)

Hashの扱いではなく、"use strict;"の指摘箇所を直せば良さそう。
参照

で、ソースを確かめてみる。。
エラーに対しては、
no strict 'refs';を追加・修正すれば良いらしい。
ただ、いじっていたらエラーが"
varsrefssubs"でコロコロ変わるもんだから、いっそここはno strict;を仮置き。。

sub autoload_plugin {
no strict;
my($self, $plugin) = @_;
unless ($self->is_loaded($plugin->{module})) {
$self->load_plugin($plugin);
}
}

先のエラーのとおり「
Plagger.pm line 199」の箇所は解けたのだけれど、今度はline 224で発生。
同様に処理。

次は、Can't locate Plageer/Plugin/.pm in @INC~ line 234とのこと。
no strict;をline 224前後に加えたことで、load_pliginサブルーチン内で引っかかってしまったのかも。

"Filter::FormatText"を直す必要あり?

(以下、さらに日を改め)

修正中。。。

2008年1月14日月曜日

PlaggerとYAMLファイルのディレクトリ

plaggerとYAMLのファイル格納先に関する情報が足りない気がしたので備忘録。


◇「config.yamlの中身」 ←C:\Perlに格納

global:
plugin_path:
- C:\Perl\site\lib\Plagger\Plugin (←pluginディレクトリアドレス)
assets_path: C:\Perl\site\lib\Plagger\assets (←assetsディレクトリアドレス)
timezone: Asia/Tokyo
cache:
base: C:\
log:
level: info


◇「hello.yaml」の中身 ←C:\Perl\site\lib\Plagger\Pluginに格納

plugins:
- module: CustomFeed::Debug
config:
title: 'Example Blog'
link: 'http://www.example.com/'
entry:
- title: 'Hello'
link: 'http://www.example.com/hello.html'
body: 'Hello, world!'

- module: Publish::OutlineText
config:
filename: C:\perl\hello.txt (←出力先、ここではテキストファイル形式で)
encoding: Shift_JIS


◇「出力結果」

コマンドプロンプトにてワークディレクトリまで移動して、
plagger -c hello.yaml

で、Plagger[info] plugin ~~ loadedのメッセージが複数出現する。
(ここで"plagger::Plugin::Publish::OutlineText [fatal] /~~~: No such file or dictinary at line 47"のようなエラーがあれば、YAMLファイルの格納先が違っている可能性があります。)

で、無事通過したら、

type C:\perl\hello.txt (←先程指定した出力先のファイルを記述)


.Example Blog
..Hello
Hello, world!

が、表示されるのでした。。

以上、module: CustomFeed::Debugとmodule: Publish::OutlineTextのどの部分が出力対象になるか確認。

2008年1月6日日曜日

フレームワーク学習 Plagger

日経ソフトウェア発行の「ずばりわかる!Web2.0プログラミング」誌を参照しつつ、
Plaggerを学習。

2006年前半期に公表されたフィードアグリゲーターなるものとのこと。
有名な参考記事は"「はらへった」とGoogle検索すると宅配ピザが届くシステム"が見つけられた。

大学院の研究で、Web上の情報を採取・加工するツールとして使えないか検討中。

本日はPlaggerのインストールにて(OSはVistaで頑張っています)。

前述の本を参考に
  1. ftp://ftp.microsoft.com/Softlib/MSLFILES/やftp://ftp.zlatkovic.com/pub/libxmlから必要なファイルをDL
  2. ppm経由で、Theoryx5リポジトリとYamlモジュールをインストール
  3. Plaggerをインストール
という流れで進行。

項番1. 2. は難なく済んだものの、3.で混迷。。

以下Plaggerインストール手順です。

**参照URL

plaggerのつまづいた際は
http://www.otsune.com/fswiki/plagger.html#p26

CPANインストール他
http://digit.que.ne.jp/visit/index.cgi?2006%C7%AF2%B7%EE#pplagger「2006年2月28日」

plagger利用のおおまかな流れは
http://mion.jp/blog2/index.php?d=20060820
**

誌面にもあるように、plaggerはppmでは0.7.14、CPANでは0.7.17と配布されるバージョンが異なります。
今回はCPANから0.7.17を利用。


◇CPAN経由でplaggerをインストール

CPAN起動コマンドは
perl -MCPAN -e shell

インストールは
force install Plagger(←モジュール名、forceはなくてもOK)
を入力。

(enter)キーをずっと反復し、224個のファイルをコピー完了
CPAN 終了 quit

次に、dir /b C:\Perl\CPAN\build\Plagger-*でassetsフォルダの存在を確認し
xcopy /I /E /H /Y c:\Perl\cpan\build\Plagger-0.7.17-diaVM0(←zero)\assets c:\Perl\site\lib\Plagger\assets  
でassetsフォルダをコピー 完了。

ここから誌面との相違が発生、、

C:\>plagger -v
でバージョン確認しようとするも失敗

エラーメッセージは「'plaggerは、内部コマンドまたは・外部コマンド'、操作可能なプログラムまたはバッチファイルとして認識されていません。」

plaggerをインストールしただけではコマンド認識されないことが調べて発覚。
plagger.batを作成することにした。


◇plagger.bat作成法

C:\>cd c:\perl\cpan\build\plagger-0.7.17-diaVM0
C:\Perl\cpan\build\Plagger-0.7.17-diaVM0>pl2bat plagger
を入力し、
plagger-0.7.17-diaVM0ディレクトリ下に作成された「plagger.bat」をperl\binへコピー。

これで先のエラーは解消。


◇plagger実行

いざplaggerを実行するもここでもエラー発生。

c:\>plagger
Can't locate Plagger.pm in @INC (@INC contains: C:\Perl\bin\lib C:/Perl/site/lib
C:/Perl/lib .) at C:\Perl\bin/plagger.bat line 21.
BEGIN failed--compilation aborted at C:\Perl\bin/plagger.bat line 21.

そういえば、先にインストールしたCPANディレクトリ下に該当ファイル「Plagger.pm」が
含まれていたことを思い出し、
C:\Perl\cpan\build\Plagger-0.7.17-diaVM0\lib から「Plagger.pm」ファイルをC:/Perl/site/libへコピーで対処(したつもり)。

再度、コマンドプロンプトにてc:\>plagger実行するも今度は
Can't locate XML/XPath.pm in @INC (@INC contains: C:\Perl\bin\lib ~)
のエラー発生。。


ここで、参照URLを調べると "Can't locate ○○.pm in @INC~"のメッセージは
○○のモジュールが欠けているor環境変数の設定に不備がある
のいずれかとのこと。

環境変数はとりあえず触れないでおき、先程と同様にCPAN起動、インストールを試みる。

CPAN起動し、install XML::XPathでインストール

CPANをquitで閉じ、
コマンドプロンプトにてplageerと入力すると、今度は

「c:\Perl\cpan\build\Plagger-0.7.17-diaVM0>plagger
Plagger::ConfigLoader->load: C:\Perl\cpan\build\Plagger-0.7.17-diaVM0\config.yam
l: No such file or directory at C:\Perl\cpan\build\Plagger-0.7.17-diaVM0\lib/Pla
gger.pm line 47」
と表示された。

plagger -vを入力すると

「c:\Perl\cpan\build\Plagger-0.7.17-diaVM0>plagger -v
Plagger version 0.7.17」

"Plagger version 0.7.17"の表示が確認され、Plagger実行環境が整ったと判断できた。


P.S.

後日再度plaggerを起動しようとしたところ、plagger -vの入力後
Can't locate Plagger/Cache.pm in @INC (@INC contains: C:\~)
のエラーが発生。

前回の方法(CPAN起動&モジュールインストール)で対処してみた。
何度か試したものの、メッセージが消えないので右往左往。。

結果
C:\Perl\cpan\build\Plagger-0.7.17-diaVM0\lib\Plaggerの中身(のフォルダ&ファイル)を
C:\Perl\site\lib\Plagger直下にコピペしたら治った。。

2008年1月3日木曜日

フレームワーク学習 Catalyst

前回同様Catalystの学習

実用に近いアプリケーションの感触を確かめたいので、
今回は日経BP社サイトからcodeを拝借。
(アプリケーション名は"Dict"、単語検索簡易辞書)

以前xamppダウンロード時に組み込まれていたsqlite.exeを
C:\Perl\site\bin\Dict\dbへコピー。

拝借したcodeの中にdict.sqlが含まれていたので、
 sqlite.exe dict.db < dict.sql
にてDB作成。

さらに、dict.ymlファイル「upload_dir:」「dsn:」部を
実行環境に応じて修正。

---
name: Dict
encoding: UTF-8
upload_dir: C:\Perl\site\bin\Dict
Model::DictDB:
dsn: dbi:SQLite2:C:\Perl\site\bin\Dict\db\dict.db

でdict\scriptディレクトリにて、dict_server.pl 実行。

以上、アプリの正常な画面遷移を確認できた。

2008年1月1日火曜日

perl雑記 フレームワーク編

フレームワークCatalyst学習

環境:
Windows Vista
perl 5.8(Active Perlインストール済)
Catalyst 2.0(2.1が最新)

で、書籍「ずばりわかる!Webプログラミング2.0」からPerlに慣れるべく奮闘。


114ページあたりのCPANからCatalyst入れる際に、Task-Catalystのインストールにつまづく。

エラー内容が既存ファイルの衝突とのこと、しかしそのファイルが見当たらなかったため検索。
「C:/Perl/html/site/lib/Catalyst/Helper.html」

すると、Task-CatalystでなくBundle-Catalystでもいけるようなのでこちらをインストール。
以下、'Hello'スケルトンを作成するも、障害が起こらないので良しとした。

(参考URL)http://naoya.dyndns.org/~naoya/mt/archives/001682.html


Catalystは確かにMVCモデルに従うディレクトリ構成(フォルダ名がそのままMとVとC)をしていた。

単純にControlとView部のみを対象に'Hello'アプリを作成することにする。
Root.pmを適宜修正し、Helloアプリのrootディレクトリにroot.ttを追加すると"Hello!"表示がされた。

次は、SQLiteと合わせてやってみるつもり。

Blogger Syntax Highliter