Webコンサルタントの愚痴とアジャイル,生産性向上,Trac,オープンソースなどの与太話
仕事では、あまりにも糞な粗製濫造ライブラリが多いのでげんなりしている今日この頃。
個人ごとの技術力の差が出てしまうことは仕方がないのだが、その差がなるべく出ないような仕掛け作りと教育プロセスは重要だろう。
ということでModule-Starter-PBPを使ってBest Practiceに従ったモジュールを作る方法。
1.インストール
cpan -i Module::Starter::PBP
2.使い方
module-starter --module=My::Test
とすると、作業ディレクトリには以下のような構成でファイルが作られる。
とりあえず、インストールしようと思えばいつもの通り
とすれば良い。
ただし現在のModule-Starter-PBP-v0.0.3では、作成されたモジュールの7行目において
use warnings;
use strict;
use Carp;
use version; $VERSION = qv('0.0.3');
となっており、テストケースが通らない。以下のように変更すること。
use warnings;
use strict;
use Carp;
use version; our $VERSION = qv('0.0.3');
なお、自動で作成されたテストケースでPerl::Criticとして書式チェックがPBPに基づいて行われるので
糞味噌な書き方のソースが作成される可能性は大幅に減ることを期待する。
ある案件でActivePerlを使っているのだが、それに関するメモ。(いつも忘れるので備忘)
Proxy環境では、ppmコマンドをたたく際には、環境変数HTTP_PROXYが必要になる。
以下のようにコマンドプロンプトで設定すれば良い。
・認証なしのProxy
・認証ありのProxy
眠れない・・・。
で、いろいろ実験したり、すでに実開発に投入しちゃったりしているのだが、「なんだかなー」な点が見つかったのでメモ。
たとえば単純にPATH_INFOを出力するだけのプログラム(test1.pl)を用意する。
これ、EPICで実行させるとき、例えばURIはtest1.pl/hogehogeみたいな形でのアクセスになるのだが、わざわざ、test1.plディレクトリにhogehogeというファイルがないかどうか調べにいってしまい、PATH_INFOとしては認識してくれない。ログは以下のとおり。
正解は、実行ダイアログを開き、

上記のように、環境タブで、環境変数を設定すれば良い。前回のエントリでREMOTE_USERなんかはここに設定すべし、と書いたがPATH_INFOまで、そうだとは・・・。(って同じ環境変数だからな~orz)
しかしPATH_INFOで画面を切り替えるようなアプリをデバッグする場合、起動構成に全部のPATH_INFOのパターンを登録しないといけない。面倒すぎる・・・。
eclipse上でPerlの開発を行うには、EPICと呼ばれるプラグインを利用する。
eclipseのメニューのヘルプ(H)→ソフトウェア更新(S)→検索およびインストール(F)とたどり、インストールする新規フィーチャーを検索(S)を選択し、新規リモート・サイト(T)を押下。
そこで、
を追加し、表示されるプラグインをインストールする。インストール完了後にいったんeclipseを再起動
続いて、ウィンドウ(W)→設定(P)からPerl EPICを選択し、最低でもPerlのパスは設定する。(PerlはActivePerlかCygwin)
PadWalkerをインストールする必要がある。
コード補完や文法チェック、シンタックスハイライト等を行ってくれる。またPerlDocの検索も出来る。
コード補完ではmy @data;みたいに配列を定義しておくと、$daとうってShift+スペースを押すとちゃんと補完されるが、ちょっと癖があり
ではコード補完が働くが
ではコード補完が働かないので注意が必要
実行(R)→実行ダイアログを開く(N)をクリック。左側のツリーの中にある、「Perl CGI」を選択し、左上の新規ボタンを押下する。ここで名前、対象プロジェクト、ドキュメントルート等を設定する。
これでCGIモードでアプリケーションを実行できる。
環境変数等特殊な値は、環境タブの中で指定する(たとえばREMOTE_USERとか)
なお、内臓HTTPDデーモンは毎回起動のたびにポート番号が違うので注意が必要だ。
とりあえず便利。
Class::DBIは超便利なわけだが、全レコードを並び替えて取得する、というのが何故か一発では出来ない(ように思える)
直感的には
とか出来そうなもんなのだが、NG。DBIだけでやるのであれば
かなり無理やり。
ただ、こいつはプラグインを使うと簡単に解決できる。利用するのはClass::DBI::Sweet。
使い方は以下の通り。この関数では引数にorder byを指定できるようになっている。
CPANのモジュールなので導入も簡単。
#補足だが、純粋にorder句を指定して全件取得できれば良いだけなら、Class::DBI::Plugin::RetrieveAllというのもある。こっちの方が使い方もインストールも簡単だ。
こまつさんからのコメント感謝。
エラーの内容は
でNet::SSLeayのmakeで失敗しているようだ。
ログを見る限り、OpenSSLのヘッダファイルが存在しないか、ライブラリへのパスが通っていないのが原因。
んで
の結果は何も該当しないので、ヘッダが無いためであると断定。
なのでヘッダ系がない。ということで
んで、改めてCPANからインストールしたところ無事make testも完了。
#しかしこんなに嵌らずとも、CentOSのパッケージで
perl-IO-Socket-SSL.noarch
がextraパッケージに用意されてた・・・・。
Perlのモジュール突っ込む前に、yumで調べるようにしないといけないね。
#それにしても色々なトラブル中に俺は何やってるんだ。。。
昨日の続き。IO::Socket::SSLがCPAN経由ではインストールできなかった件だが、とりあえずtar玉からインストールすることで解決。
の順に実施してインストール完了。とりあえず問題なさそうで、ddclientの処理モードをSSLに変えることが出来た。
なお、ddclientを非デーモンモードでデバッグログ付で出力するには以下のコマンドを使う。
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>
かなり手抜きだが、こんなんで動くのが素敵。
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に出力する場合の説明はこちら。
日記 PHP オープンソース Linux Trac Perl wordpress フリーソフト 自宅サーバ phpMyFaq Plugin Delphi 書評 apache eclipse Subversion Firefox セキュリティ アジャイル プラグイン mojavi Ruby Ajax/Web2.0 CakePHP Zope フレームワーク サーバ 文字化け scuttle OpenVZ 自宅 phpBB 仮想化 翻訳・日本語化 CMS ApacheDS LDAP 生産性向上 hacks CodeIgniter Agile・生産性向上 レビュー XAMPP Excel SBM 言語ファイル 修正 Ajax taskfreak mod_security ダウンロード HTML::FillInForm 情報共有 格安 レンタル アンケート API PhpScheduleIt 翻訳