Lightweight Languageの最近のブログ記事

2011年12月24日
| コメント(0) | トラックバック(0) 「Perl Advent Calendar Japan 2011」に記事を書きました

毎年読むだけだった「Perl Advent Calendar Japan」に、今年は記事を書きました。
あくまでカジュアルにモジュールを使う感じで書いています。
「CGI=Perl」と思っている方はまだまだ多いと思いますので、少しでも最近のPerl(Modern Perl)を感じてもらえたらなぁ、という気持ちで書きました。

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);
}

思い込みって怖いですね。

つい最近知ったのですが、history.pushStateとAJAXを組み合わせた、PJAXというjQueryのプラグインがあるようです。
PJAXは、history.pushStateでヒストリーを作りながらAJAXでページを遷移させずに更新することで、従来のAJAXの問題点をクリアさせるものです。

「戻る」もOK ソーシャルにも優しく クローラーへも対応 JavascriptoffのユーザもOK

問題点が解決できるのであれば、採用しない手はないですよ、って事で、Mojolicious::Liteで書いてみました。

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

どうでしょうね、コレ。

以前、CORESERVERにconcrete5をインストールしたわけですが、ちょっと前に、同じサーバー(しかし、ドメインは別)にconcrete5で新しくウェブサイトを作りました。

で、新しいサイトを作るとき、プログラムのファイルを一式まるごとインストールしたんですが、ソースコードを眺めたり色々と触っているうちに、プログラムファイルを使いまわせそうな感じがしたので、もともとインストールした方で試してみました。


ちなみに、この記事は「concrete5.4.1.1.1.ja」について書かれています。
他のバージョンでは違うかもしれません。

試したのは4つ。

面白かったのは、Identicon5ですね。
文字列よりも画像のほうが違いがよくわかります。

そういう意味では、Chroma-Hashも違いはわかるのですが、ちょっと地味な感じでした。
プラグインとしては、使い方が非常にシンプルなので、使ってみても面白いと思います。

計算のプラグインですが、機能的にはjquery.crypt.jsの方が多機能ですが、プラグインとしては、妙に使いにくい感じでした。

「MD5 hash algorithm function」は、機能はシンプルで、普通の関数のように扱えるのは便利ですね。

Mojolicious::Liteネタですが、もう周回遅れ気味ですね。
6月3日にversion1.41になっています。

このスクリプトは、devel.nqou.netを作ったときに、ソースを見るビューアとして書いたものを、Mojolicious::Liteで書きなおしたものです。

サンプルばかりではなく、実際に使うもの(使えるものかどうかはともかく)を作ってみるのも良いものですね。

「concrete5」というCMSをOSC2011Kobeで知って、面白そうだったので、インストールしてみた。

Google検索

Last.fm

このアーカイブについて

このページには、過去に書かれたブログ記事のうちLightweight Languageカテゴリに属しているものが含まれています。

前のカテゴリはLifeです。

次のカテゴリはPersonです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type