自称ITアーキテクトの自堕落な日常を綴る日記です。
技術ネタを書こうと始めた日記なのに、文房具ネタの方が多いというのが目下の悩み。
CGI の高速化技術にはいくつか種類があるがシステム管理メモでは SpeedyCGI を使用している。
ほかの方法(mod_perl,FastCGI等)と比較しての特徴としては、
具体的な利用方法としては、perl スクリプトの先頭行の
#!/usr/bin/perl
等となっている部分を、
#!/usr/bin/speedy
に変更するだけ。
グローバル変数の扱い等は mod_perl 同様保持され続けるので気をつけなければならないが、そのほか %ENV と言った変数は自動的に毎回初期化されるので、よほど変な組み方でない限り CGI はそのまま実行できる。このあたりは Perl 専用である強みと言える。
実際の設定例としても システム管理メモ の wiki.cgi の先頭行を
#!/usr/local/bin/speedy -- -gfswiki
に変更したのみ。
-- で区切った前がperl のオプションで、後ろが speedy コマンドのオプションとなる。
今回はシンボリックリンク等で別名で呼ばれたときのためにグループ名を指定している。
最近のブームに乗って Ajax に手を出そうかと思ってる。
ただ、JavaScript 用の開発環境の悪さはいかんともしがたい。
また、ページやデータの生成処理は別言語であろうことから、メンテナンスが複雑になるのもいやだ。
と言うことで基本的には Ajax 用のコードはフレームワーク等によって自動生成するのが良いと考えている。
同じことを考えている人はいるようでいくつかのモジュールがあるのだが、とりあえずためしに使用しているのが CGI::Ajax。
#!/usr/bin/perl
use CGI;
use CGI::Ajax;
my $cgi = new CGI;
my $pjx = new CGI::Ajax( 'exported_func' => \&perl_func );
print $pjx->build_html( $cgi, \&Show_HTML, {-charset=>'UTF-8, -expires=>'-1d'} );
基本的に使い方はこれだけ。1つのCGI でHTMLとAjax で呼ぶコードの両方を定義し fname パラメーターによって動作を切り替えるようだ。
perl_func が Ajax で実際呼ばれるコード, Show_HTML はベースとなるHTML を返すサブルーチン。
fname パラメータがない場合は &Show_HTML が実行された結果に生成した JavaScript を埋め込んで出力する。 exported_func と言うfunction が生成されているので、HTMLではそれを呼ぶようにしておけばよい。
fname パラメータつきで呼ばれた場合、対応する perl サブルーチンの実行結果(fname=exported_func の場合 &perl_func)が返される。 出力結果がそのまま HTML に埋め込まれるので、タグを考慮した形でサブルーチンを定義しなければならない。
HTML 出力、メソッド呼び出し共にヘッダは含めないで、build_html の第3引数で指定する。Javascript 側の仕様なのか、UTF-8 でないと文字化けするのと、expires を指定しなかった場合 IE での動作が怪しいようだ。
HTML 側ではメソッドの引数と結果を埋め込む場所の ID 属性を指定すればよいようだ。
sub Show_HTML {
my $html = <<EOHTML;
<HTML>
<BODY>
Enter something:
<input type="text" name="val1" id="val1"
onkeyup="exported_func( ['val1'], ['resultdiv'] ); return true;"><br>
<div id="resultdiv"></div>
</BODY>
</HTML>
EOHTML
return $html;
}
サンプルの場合、メソッドの実行結果が、<div id="resultdiv"></div>の要素として埋め込まれる。
埋め込める対象としては、div,input,textarea のみ。その他でも innerHTML プロパティを持つ要素になら埋め込めるようだが、確認はしていない。
メソッド呼び出しと結果の埋め込みしかできない為、応用範囲は狭いと思うが、ちょっとしたものを作るだけならかなり簡単にできる。
実際テスト的に作ったアプリケーションではものの30分程度で既存 CGI から Ajax 対応に変更できた。お手軽である。
1週間前、何とはなしに読んでいたとある人の日記に触発され豚まんがめちゃくちゃ食いたくなった。
調べてみると三宮近辺にはそこそこメジャーな豚まんがいくつかあるらしいので食べ比べてみることに。
最初は一番有名な老祥記・老祥紀の豚まんから。記・紀の一文字しか違わないがそれぞれ別の店。親戚ではあるがあまり交流は無いと言うことらしい。
とはいえ味のほうはそっくりで小ぶりだがしっかりとした皮が良い。関西で一般的な甘めの豚まんとは違い、どちらも醤油のみの味付けでちょっと辛口。どちらかと言うと老祥記の方が濃い味付けのようだ。小さいので4〜5個くらいはぺろりといける。
次は太平郭の豚まん。大きさは中ぐらいで基本甘めだが胡椒が少し利いている。一緒に角煮まんも食べたのだがこちらは饅頭というより中華バーガー?と言う感じ。ちょっと生地がもちもちしすぎて食べにくかった。
最後に三宮一貫楼と551蓬莱。一緒にしてるのは正直あんまり味の違いがわからなかったから。どちらもかなり大きめでたまねぎがたっぷり入ってジューシーな感じ。
豚まんと聞いて想像する一番ベーシックな味かな。とはいえ関東だと豚まんが甘いのは珍しいらしい。
5点食べ比べた結果として1番はダントツで老祥記だと思った。かなり並ばなければならないが、その代わり蒸しあがった直後のものがそのままいただけるのがすばらしい。
友人と買いに行ったときにちょうど蒸しあがりの前後に分かれたのだが、ほんの5分ほどしか変わらなかったにもかかわらず出来立てアツアツのほうが明らかにうまかった。
ただ、自分は空いてる時間帯にいったのですぐに買えたが通常は30分〜1時間まちはざらの様だ。待ちたくないなら老祥紀の方をお勧めする。こちらも遜色ない味であるにもかかわらず、まったく待つ必要がないからだ。
日ごろ食べる分には太平郭がお気に入り。並ばなくて済むし駅からも近いから。一貫楼や551は確かにうまいのだが自分にはちょっと大きすぎる。
豚まんばかり食べていてふと隣を見ると餃子が。こんどは餃子のうまい店を探してみようか。