Webコンサルタントの愚痴とアジャイル,生産性向上,Trac,オープンソースなどの与太話
仕事でとあるサイトのGoogle Page Rankをいっぱい調べないといけないらしいのだが、驚いたことに手打ちで調べようとしている人がいる。こういうのはシステムが得意なのに。システムで自動でできちゃうようなことを人手で力技でやろうとするから残業地獄になっちゃうんだよ~。
ということで、Perlでのやり方のメモ。
肝は、CPANのモジュールにあるWWW::Google::PageRankを使えば一発だ、ってこと。
1.CPANからWWW::Google::PageRankをインストールする。
2.もう準備完了。以下のようなスクリプトを書けば良い。
これで@URLに指定されたURLのページランクをまとめて取得できる。結果は以下のように表示される。
簡単すぎる。
似たような話で、WebService::Hatena::BookmarkCountを使うと、はてなBookmarkの被ブックマーク数とかも自動で分かる。
CPANのSYNPSISを見ると
my $tidy = HTML::Tidy->new( {config_file => 'path/to/config'} );
$tidy->ignore( type => TIDY_WARNING );
$tidy->parse( "foo.html", $contents_of_foo );
for my $message ( $tidy->messages ) {
print $message->as_string;
}
ってあるので、foo.htmlを用意して、上記の通りやってみたんだけどうまくいかない。
なんでかと思ったら、parse関数って、
ということで、このファイル名って実際には、単なる識別のためだけで、実際には、ファイルを開いたり読んだりしてないそうな。
まぎらわしすぎる。
実際には
my $tidy = HTML::Tidy->new( {config_file => 'path/to/config'} );
$tidy->ignore( type => TIDY_WARNING );
open(F, "foo.html") or die('die...');
@DATA = <f>;
close(F);
$contents_of_foo = "";
foreach(@DATA) {
$contents_of_foo .= $_;
}
$tidy->parse( "foo.html", $contents_of_foo );
for my $message ( $tidy->messages ) {
print $message->as_string ."\n\n";
}
とかして、第二引数にファイルの中身を渡さないといかん。(File::Dataとか使っても良い)
configファイルについては、こちらが参考になる。
仕事では、あまりにも糞な粗製濫造ライブラリが多いのでげんなりしている今日この頃。
個人ごとの技術力の差が出てしまうことは仕方がないのだが、その差がなるべく出ないような仕掛け作りと教育プロセスは重要だろう。
ということで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 <スクリプト名>
日記 PHP オープンソース Linux Trac Perl wordpress フリーソフト Agile 自宅サーバ phpMyFaq Plugin 書評 Delphi apache プラグイン Subversion アジャイル mojavi セキュリティ Ruby Firefox Ajax/Web2.0 eclipse サーバ Zope フレームワーク CakePHP 文字化け scuttle OpenVZ 自宅 phpBB CMS 翻訳・日本語化 Excel ApacheDS 生産性向上 仮想化 hacks CodeIgniter XAMPP LDAP SBM taskfreak Ajax 修正 言語ファイル mod_security ダウンロード HTML::FillInForm 情報共有 格安 メンテナンス 移転 アンケート レンタル PhpScheduleIt 翻訳 API