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

どうでしょうね、コレ。

先日購入したばかりのMacBookProですが、妻曰く、無償アップデートの対象の可能性があるということでオフィシャルに行って確認してみました。
購入日と購入した店舗、シリアルナンバー等を入力してチェックしてみると、対象になっていました。

促されるまま、Appストアを起動すると、コードの入力画面になり、入力後ダウンロードが開始しました。

そんなこんなでダウンロード完了(これが、結構かかりました…)し、インストールも無事完了(これは40分弱くらいでした)しました。

スクリーンショット 2011-07-22 05.04.22.png

事前に調べたところ、トラックパッドのスクロールが逆になったということで、早速変更しました。
しかし、Launchpadを起動させると、雰囲気がまるでタブレットだったので、結局元に戻しました。
トラックパッドではなく、タッチパネルなのだと思うようにしたのです。

スクリーンショット 2011-07-23 12.31.37.png

デジカメや携帯で写真を撮ったのをパソコンに取り込むのって、結構面倒です。

まあ、MacだとiPhotoに任せてやればいいのかもしれませんが、正直なところiTunesに曲の管理を任せるのも微妙に思える今日この頃。
写真の管理くらいは自分でやっておきたい、と思うわけです。
なので、自力で(というかiPhotoを使わずに)整理するために必要なソフトを探していました。
で、ようやく使い方にフィットしたソフトを見つけることができたので、書いておこうと思います。

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

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


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

WindowsでずっとPerlをやってきたわけですが、Mac(OSX)になって大きく違いを感じるのが、改行コードとパーミッションです。

改行コードの問題については分かっていたはずなのですが、FFFTPの設定によってテキストモード(ASCIIモード)でアップロードされるので、あまり意識していませんでした。
昔は、エディタの改行コードをUNIXタイプ(LF)という風に設定していたのですが、いつの間にかWindowsタイプ(CRLF)になっていたようです。

で、Macになってローカル環境で実行したときに、こんなエラーが出たので、改行コードの違いに気づきました。

/usr/bin/perl^M: bad interpreter: No such file or directory

そこで思い出したのが、改行コードを変更するワンライナーでした。
と言っても、ワンライナー自体を思い出したのではなく、そういうワンライナーがある、という記憶を思い出しただけです。
ググって調べた結果に、少しの知識を加えてできたのが、以下のワンライナーです。

$ find . -name "*.cgi" | xargs perl -i.bak -pe "s/\x0d\x0a/\x0a/g"

ググッてみると、最後の「g」がなかったり、\x0dと\x0aの事を「\r」「\n」という風に書いていたり、という、ちょっと残念な感じのワンライナーもしばしば見受けられました。
本文のすべての改行を変更するので、置換処理の繰り返し「g」は必要だろうし、\rや\nは改行コード自体を置換するのには不向き、という話があったと思うので。

また、0d0aは時々8進数で(\015\013とか。)書いてあったりするのですが、私の中では16進数で覚えていることもあって、とっさに8進数では出てこないです…。

で、このワンライナーを実行すると、バックアップファイルを作成してもらえるので、もし何かあっても安心ですね。

バックアップファイルを消すときは、こんな感じで。

$ find . -name "*.cgi.bak" | xargs rm

試したのは4つ。

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

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

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

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

Google検索

Last.fm

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

アイテム

  • スクリーンショット 2011-07-23 12.31.37.png
  • スクリーンショット 2011-07-22 05.04.22.png
  • mac10_6_8.png
  • WS000001.gif
  • pn_preference.gif
  • Satomi-Ishihara-1130277-small.jpg

Awasete.com

あわせて読みたいブログパーツ

Blog Chart

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