毎年読むだけだった「Perl Advent Calendar Japan」に、今年は記事を書きました。
あくまでカジュアルにモジュールを使う感じで書いています。
「CGI=Perl」と思っている方はまだまだ多いと思いますので、少しでも最近のPerl(Modern Perl)を感じてもらえたらなぁ、という気持ちで書きました。
Lightweight Languageの最近のブログ記事
「Perl Advent Calendar Japan 2011」に記事を書きました
Mojo::URLでschemeが変更できなくて困っていた話
Mojoliciousで、必ずhttpsの状態でアクセスされるように、こんな感じのコードを書いていたのですが、思ったように動かなくて困りました。
schemeの部分がhttpsにならなくて、無限ループになっていました。
# NG
if ( $self->req->is_secure ) {
$self->redirect_to('/login');
}
else {
my $url = $self->url_for('/login')->scheme('https');
$self->redirect_to($url->to_abs);
}
schemeは属性(attribute)という風になっていたし、オブジェクトの中身を見ても、schemeは値を持っているように見えたので、何故変更できないんだろう、と思っていました。
色々試しているうちに、to_absが文字列を返すのではないことに気づきました。
なんとなく、文字列を返すメソッドだと思っていたのですが、実際にはオブジェクトを返しています。
文字列を返しているように見えたのは、実際にはto_stringが呼ばれていたからです。
敗因は、to_absが何を返すのかを理解できていなかった事です。
実は、to_absを呼んだ時点で、現在のbaseになるURLがcloneされるので、先に設定した(つもりの)schemeが無視されてしまうようです。
つまり、schemeを設定しようと思えば、まずto_absで絶対URLオブジェクト(?)にしておいてからやれば良い、ということですね。
# OK
if ( $self->req->is_secure ) {
$self->redirect_to('/login');
}
else {
my $url = $self->url_for('/login')->to_abs->scheme('https');
$self->redirect_to($url);
}
思い込みって怖いですね。
SEE ALSO
うわさのPJAXをMojolicious::Liteで書いてみた
つい最近知ったのですが、history.pushStateとAJAXを組み合わせた、PJAXというjQueryのプラグインがあるようです。
PJAXは、history.pushStateでヒストリーを作りながらAJAXでページを遷移させずに更新することで、従来のAJAXの問題点をクリアさせるものです。
「戻る」もOK ソーシャルにも優しく クローラーへも対応 JavascriptoffのユーザもOK
問題点が解決できるのであれば、採用しない手はないですよ、って事で、Mojolicious::Liteで書いてみました。
mixiのコミュニティのトピックから画像をダウンロードするスクリプトを書いた
mixiページが始まってから、また、mixiを使うようになりました。
少しだけですが。
で、コミュニティのトピックを見ていた時に、画像を一つ一つクリックして見るのが面倒になったので、どうにかならないかと思って書きました。
sakuraサーバーのプレミアムプランを契約したので、早速cpanmをインストールしようと、以前まとめた内容でやってみました。
1行目からアウトでした。
ということで、curlを使ったやり方に変更し、2行目までを同時に実行しようとしました。
curl -L http://cpanmin.us | perl - --local-lib=~/perl5 local::lib App::cpanminus
ところが、local::libが上手く入りません。
幸い、cpanmは入ったので、コレでいいかと思っていたのですが、シェルで使ったときに何かと不便な(PATHが通っていなかったり、「-l ~/perl5」を毎回指定しなければいけなかったり、@INCに「/home/username/perl5/lib/perl5」が追加されなかったり)ので、まずはそれらの設定を手作業でやりました。
ホームディレクトリの「.cshrc」を開いて、
set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin)
となっていた部分に「$HOME/perl5/bin」を追記して、以下のようにしました。
set path = ($HOME/perl5/bin /sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin)
で、あとは適当な所に以下の2行を追記しました。「username」は適宜読み替えてください。
setenv PERL_CPANM_OPT "-l ~/perl5"
setenv PERL5LIB "/home/username/perl5/lib/perl5"
その状態だと、local::libがすんなりと入ったので、実際にはこうすればよかったのでは?というのを次回のために書いておきます。
うまくいくかどうかはわかりません。
curl -L http://cpanmin.us | perl -I$HOME/perl5/lib/perl5 - --local-lib=~/perl5 local::lib App::cpanminus
echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >> ~/.cshrc
どうでしょうね、コレ。
concrete5のプログラムファイルを使い回す方法
以前、CORESERVERにconcrete5をインストールしたわけですが、ちょっと前に、同じサーバー(しかし、ドメインは別)にconcrete5で新しくウェブサイトを作りました。
で、新しいサイトを作るとき、プログラムのファイルを一式まるごとインストールしたんですが、ソースコードを眺めたり色々と触っているうちに、プログラムファイルを使いまわせそうな感じがしたので、もともとインストールした方で試してみました。
ちなみに、この記事は「concrete5.4.1.1.1.ja」について書かれています。
他のバージョンでは違うかもしれません。
ハッシュ系jQueryプラグインをいくつか試してみた
試したのは4つ。
- jquery.crypt.js
MD5とSHA1等を計算するプラグイン - MD5 hash algorithm function | jQuery Plugins
MD5を計算するプラグイン - Identicon5 | jQuery Plugins
MD5の計算結果を画像に変換するプラグイン - Chroma-Hash | jQuery Plugins
パスワード入力等で入力された値をハッシュ化して画像で表示するプラグイン
面白かったのは、Identicon5ですね。
文字列よりも画像のほうが違いがよくわかります。
そういう意味では、Chroma-Hashも違いはわかるのですが、ちょっと地味な感じでした。
プラグインとしては、使い方が非常にシンプルなので、使ってみても面白いと思います。
計算のプラグインですが、機能的にはjquery.crypt.jsの方が多機能ですが、プラグインとしては、妙に使いにくい感じでした。
「MD5 hash algorithm function」は、機能はシンプルで、普通の関数のように扱えるのは便利ですね。
sourcereader.cgiをMojolicious::Liteで書きなおした
Mojolicious::Liteネタですが、もう周回遅れ気味ですね。
6月3日にversion1.41になっています。
このスクリプトは、devel.nqou.netを作ったときに、ソースを見るビューアとして書いたものを、Mojolicious::Liteで書きなおしたものです。
サンプルばかりではなく、実際に使うもの(使えるものかどうかはともかく)を作ってみるのも良いものですね。
jGmapsプラグインがいまいちだった件
経路案内も簡単に実装できる、ということで気になって使ってみようと思ったのですが、途中で挫折してしまいました。
CORESERVERでconcrete5を動かしてみた
「concrete5」というCMSをOSC2011Kobeで知って、面白そうだったので、インストールしてみた。
| Blog: |
| 日曜プログラマのそゞろ事 |
Topics: |
| Perl |

