header image

Ryuzeeの他サイト

mixi Twitter Twitter

Categories

携帯対応

QRコード

RING

人気ブログランキング



新着記事

2008/04/20 19:42:25 Perl none Comments
add Hatena Bookmark Tags:

仕事では、あまりにも糞な粗製濫造ライブラリが多いのでげんなりしている今日この頃。
個人ごとの技術力の差が出てしまうことは仕方がないのだが、その差がなるべく出ないような仕掛け作りと教育プロセスは重要だろう。
ということでModule-Starter-PBPを使ってBest Practiceに従ったモジュールを作る方法。

1.インストール
cpan -i Module::Starter::PBP

2.使い方

module-starter --module=作りたいモジュール名

module-starter --module=My::Test
とすると、作業ディレクトリには以下のような構成でファイルが作られる。

Build.PL
MANIFEST
Makefile.PL
lib
t
Changes
Makefile
README

とりあえず、インストールしようと思えばいつもの通り

perl Makefile.PL
make
make test
make install

とすれば良い。

ただし現在のModule-Starter-PBP-v0.0.3では、作成されたモジュールの7行目において

package My::Test2;

use warnings;
use strict;
use Carp;

use version; $VERSION = qv('0.0.3');

となっており、テストケースが通らない。以下のように変更すること。

package My::Test2;

use warnings;
use strict;
use Carp;

use version; our $VERSION = qv('0.0.3');

なお、自動で作成されたテストケースでPerl::Criticとして書式チェックがPBPに基づいて行われるので
糞味噌な書き方のソースが作成される可能性は大幅に減ることを期待する。

2008/04/18 12:06:37 Perl none Comments
add Hatena Bookmark Tags:

ある案件でActivePerlを使っているのだが、それに関するメモ。(いつも忘れるので備忘)
Proxy環境では、ppmコマンドをたたく際には、環境変数HTTP_PROXYが必要になる。

以下のようにコマンドプロンプトで設定すれば良い。
・認証なしのProxy

set HTTP_PROXY=http://proxyname:port

・認証ありのProxy

set HTTP_PROXY=http://userid:password@proxyname:port

2008/01/08 04:45:45 Perl none Comments
add Hatena Bookmark Tags: , ,

眠れない・・・。
で、いろいろ実験したり、すでに実開発に投入しちゃったりしているのだが、「なんだかなー」な点が見つかったのでメモ。

たとえば単純にPATH_INFOを出力するだけのプログラム(test1.pl)を用意する。

#!/usr/bin/perl
use strict;
my $path_info = $ENV{"PATH_INFO"};
print "Content-type: text/html\n\n";
print $path_info . "\n\n";

これ、EPICで実行させるとき、例えばURIはtest1.pl/hogehogeみたいな形でのアクセスになるのだが、わざわざ、test1.plディレクトリにhogehogeというファイルがないかどうか調べにいってしまい、PATH_INFOとしては認識してくれない。ログは以下のとおり。

LOG: 5 5007-127.0.0.1-3: file.: Looking for file: (C:/dev/workspace)(\perl_test\test1.pl\hogehoge)
LOG: 4 5007-127.0.0.1-3: file.: no such file: C:\dev\workspace\perl_test\test1.pl\hogehoge
LOG: 3 5007-127.0.0.1-3: Error: 404 Not Found: /perl_test/test1.pl/hogehoge

正解は、実行ダイアログを開き、
perl_epic
上記のように、環境タブで、環境変数を設定すれば良い。前回のエントリでREMOTE_USERなんかはここに設定すべし、と書いたがPATH_INFOまで、そうだとは・・・。(って同じ環境変数だからな~orz)
しかしPATH_INFOで画面を切り替えるようなアプリをデバッグする場合、起動構成に全部のPATH_INFOのパターンを登録しないといけない。面倒すぎる・・・。

2008/01/06 07:25:02 Perl none Comments
add Hatena Bookmark Tags: ,

eclipse上でPerlの開発を行うには、EPICと呼ばれるプラグインを利用する。

インストール

eclipseのメニューのヘルプ(H)→ソフトウェア更新(S)→検索およびインストール(F)とたどり、インストールする新規フィーチャーを検索(S)を選択し、新規リモート・サイト(T)を押下。
そこで、

EPIC
http://e-p-i-c.sourceforge.net/updates/

を追加し、表示されるプラグインをインストールする。インストール完了後にいったんeclipseを再起動

続いて、ウィンドウ(W)→設定(P)からPerl EPICを選択し、最低でもPerlのパスは設定する。(PerlはActivePerlかCygwin)

デバッガのインストール

PadWalkerをインストールする必要がある。

ppm install PadWalker

出来ること

コード補完や文法チェック、シンタックスハイライト等を行ってくれる。またPerlDocの検索も出来る。
コード補完ではmy @data;みたいに配列を定義しておくと、$daとうってShift+スペースを押すとちゃんと補完されるが、ちょっと癖があり

my $c = CGI->new();
my $aaa = $c->param("aaa");

ではコード補完が働くが

my $c = new CGI();
my $aaa = $c->param("aaa");

ではコード補完が働かないので注意が必要

CGIの実行

実行(R)→実行ダイアログを開く(N)をクリック。左側のツリーの中にある、「Perl CGI」を選択し、左上の新規ボタンを押下する。ここで名前、対象プロジェクト、ドキュメントルート等を設定する。
これでCGIモードでアプリケーションを実行できる。
環境変数等特殊な値は、環境タブの中で指定する(たとえばREMOTE_USERとか)
なお、内臓HTTPDデーモンは毎回起動のたびにポート番号が違うので注意が必要だ。

感想

とりあえず便利。

2007/12/20 23:50:29 Perl none Comments
add Hatena Bookmark Tags:

Class::DBIは超便利なわけだが、全レコードを並び替えて取得する、というのが何故か一発では出来ない(ように思える)

直感的には

Obj->retrieve_all({ order_by => 'hoge' });

とか出来そうなもんなのだが、NG。DBIだけでやるのであれば

Obj->retrieve_from_sql(qq{ [常に成立するwhere句の中身] order by [ソート順] });

かなり無理やり。

ただ、こいつはプラグインを使うと簡単に解決できる。利用するのはClass::DBI::Sweet。
使い方は以下の通り。この関数では引数にorder byを指定できるようになっている。

$iterator = MyApp::Article->retrieve_all( order_by => 'created_on' );

CPANのモジュールなので導入も簡単。

#補足だが、純粋にorder句を指定して全件取得できれば良いだけなら、Class::DBI::Plugin::RetrieveAllというのもある。こっちの方が使い方もインストールも簡単だ。

2007/05/09 01:01:35 Perl none Comments
add Hatena Bookmark Tags:

こまつさんからのコメント感謝。

エラーの内容は

SSLeay.xs:102:25: openssl/err.h: そのようなファイルやディレクトリはありません
SSLeay.xs:103:27: openssl/lhash.h: そのようなファイルやディレクトリはありません
SSLeay.xs:104:26: openssl/rand.h: そのようなファイルやディレクトリはありません
(以下略)

でNet::SSLeayのmakeで失敗しているようだ。
ログを見る限り、OpenSSLのヘッダファイルが存在しないか、ライブラリへのパスが通っていないのが原因。
んで

[root@kamakura IO-Socket-SSL-1.06]# find / -name lhash.h

の結果は何も該当しないので、ヘッダが無いためであると断定。

[root@kamakura IO-Socket-SSL-1.06]# rpm -aq | grep ssl
openssl-0.9.7a-43.14
xmlsec1-openssl-1.2.6-3
mod_ssl-2.0.52-28.ent.centos4

なのでヘッダ系がない。ということで

[root@kamakura IO-Socket-SSL-1.06]# yum install openssl-devel

んで、改めてCPANからインストールしたところ無事make testも完了。

#しかしこんなに嵌らずとも、CentOSのパッケージで
perl-IO-Socket-SSL.noarch
がextraパッケージに用意されてた・・・・。
Perlのモジュール突っ込む前に、yumで調べるようにしないといけないね。

#それにしても色々なトラブル中に俺は何やってるんだ。。。

2007/05/08 06:57:51 Linux, Perl 1 Comments
add Hatena Bookmark Tags: ,

昨日の続き。IO::Socket::SSLがCPAN経由ではインストールできなかった件だが、とりあえずtar玉からインストールすることで解決。

wget http://search.cpan.org/CPAN/authors/id/S/SU/SULLR/IO-Socket-SSL-1.06.tar.gz
tar xvfz IO-Socket-SSL-1.06.tar.gz
cd IO-Socket-SSL-1.06
perl Makefile.PL
make
make install

の順に実施してインストール完了。とりあえず問題なさそうで、ddclientの処理モードをSSLに変えることが出来た。

なお、ddclientを非デーモンモードでデバッグログ付で出力するには以下のコマンドを使う。

ddclient -daemon=0 -debug -verbose -noquiet>debug.log 2>&1

2007/01/27 22:07:55 Perl none Comments
add Hatena Bookmark Tags:

Perlのサブルーチンが何をやっているか調べたいときには

perl -MO=Deparse <スクリプト名>

せっかくscuttleを入れたので、このサイトにタグ一覧を表示するようにしてみた。左側のメニューのところにつけている。

実装は簡単だ。

scuttleの場合、del.icio.usと同様にAPIが提供されている。APIの戻り値はXMLデータなので、後はこれをParseするなりすれば出来上がりだ。

今回はPerlで作ってみたが、XMLさえ読めればどんな言語でもOK。

作ったCGIはこちら。 (ご利用は自己責任で。なんかあってもしらん)

使い方は簡単で、以下のようにJAVAスクリプトで読み出せばよい。

<script type="text/javascript" src="http://yourdomainname/cgi-bin/tags.cgi"></script>

かなり手抜きだが、こんなんで動くのが素敵。

2006/09/16 13:02:48 Perl none Comments
add Hatena Bookmark Tags: ,

PerlでSyslogにログを吐く方法

perl -MCPAN -e shellinstall Sys::Syslog

としてSys::Syslogモジュールを導入する。

あとは簡単でこのモジュールをアプリから呼べば良い。

#!/usr/bin/perl
use Sys::Syslog qw(:DEFAULT setlogsock);
setlogsock('unix');
openlog("$program $$", 'ndelay', 'user');
syslog('notice', '実行しますた');

これで、/var/log/messagesにログが出る。デバッグに便利ってか。

ちなみにC言語でsyslogに出力する場合の説明はこちら

« 前の記事 

add to hatena hatena.comment (0) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 0