トップ 最新 追記

おいぬま日報(不定期)

カテゴリ | 技術情報まとめWiki | 検索エンジンから来た人向け | RSS

2006年
8月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31



2006-08-05 [長年日記]

@ [apache] Apache 2.2.3をインストール

この日記が動いているmod_proxyサーバを2.2.0から2.2.3にしてみました。というわけでいつもの覚書。

$ export CFLAGS="-O3"
$ ./configure --prefix=/usr/local/httpd_proxy \
 --with-mpm=worker \
 --enable-shared \
 --enable-so \
 --enable-modules='rewrite action ssl host-alias proxy headers proxy_balancer proxy_http deflate'
$ make
# make install

実験的にコンパイルオプションに-O3付けてみましたが大丈夫かな。。。


2006-08-06 [長年日記]

@ [rails] Ruby on Rails入門―優しいRailsの育て方

買いました。今年の5月ぐらいからrails本の出版ラッシュでしたが、今まで出てきたモノは初心者向けのいわゆる「チュートリアル系」が多かった気がします。でもこれはどちらかと言うとリファレンスとしてひけるモノで、「rails的にどうやるのが一番いいのか?」と悩んでいる時にぱっと答えがある、かゆいところに手が届く系だという印象です。まだパラパラっとしか見てませんが。


2006-08-10 [長年日記]

@ [cpan] CGI::Session::Memcached

これが実装されたら結構喜ぶ人いるだろうなぁ。要望としては上がっているみたいだけど、放置されているのでしょうか?ちなみにApache::Session::Memcachedはある。

今実装したらヒーローになれる予感。


2006-08-11 [長年日記]

@ ループカウンタはなぜに i とか j?

for (int i = 0; i < max; i++) {
    ...
}

CやJavaを筆頭に、上記のようなfor文で使用されるループカウンタはなぜ i とか j という変数名なんだろう、とふと疑問に思ったので「ループカウンタ 変数名 i なぜ」でぐぐってみると

いや、きっとFORTRAN 77(もっと前のFORTRANからあったかも)からの伝統でしょう。

#FORTRAN 77ではi-nは宣言無しでIntegerだったので、ループカウンタとして非常によく使われています。

という解説が。なんとなく「単に短くてわかりやすいから?」かなぁと思ってたんですが、なるほど、FORTRANまで遡るんですか。ちゃんと理にかなった理由があって気持ちよく納得できました。

@ [perl] MakeMakerによるPerlプロジェクトのビルド

ExtUtils::MakeMakerについて。今風なやり方だとModule::Build使うんでしょうか。


2006-08-14 [長年日記]

@ [cpan] CGI::Session::Memcached(2)

試しに作ってみました。ダウンロードはこちらから。んで、ついでにCPANにもアップしてみました。PAUSEの使い方をきちんとわかっていませんが、たぶん今アップ待ちなんだと思います。そのうちRecentにでも並ぶはず。

本日のツッコミ(全2件) [ツッコミを入れる]

# kabayama [GJ!!!]

# おいぬめ [どもー。早速某サイトでも使いたいと思います(笑)]


2006-08-16 [長年日記]

@ [perl] CGI->redirectでSet-Cookieのヘッダーを出す

CookieでID管理するセッションに何かセットしてリダイレクト、という処理は良くあると思うのですが、この辺り自前でやるのはちょい面倒なのでCGIで出来ないか調べてみたところ、ドキュメントには載ってないっぽいのですが、下記のコードでリダイレクトのヘッダと共にSet-Cookieのヘッダーを出すことが出来ます。

use strict;
use CGI;
use CGI::Cookie;
my $q = CGI->new;
my $cookie = CGI::Cookie->new(
    -name   => 'hoge',
    -value  => 'VALUE',
    -path   => '/',
);
print $q->redirect(-uri => '/', -cookie => $cookie->as_string);
HTTP/1.x 302 Moved
Date: Wed, 16 Aug 2006 09:20:52 GMT
Server: Apache
Set-Cookie: hoge=VALUE; path=/
Location: /
Content-Length: 272
Connection: close
Content-Type: text/html; charset=iso-8859-1
X-Pad: avoid browser bug

なんでドキュメントに載ってないんだろう。。。

@ [apache] mod_fastcgi -> mod_fcgid

mod_fastcgiよりもmod_fcgidの方が速いとあったのでこの日記を動かしているアプリケーションサーバのモジュールを変えてみました。確かにベンチレベルでは少し早くなったけど、体感的には変わらずという感じです。まぁIOが完全にボトルネックになってるんだったら関係ないんで、そこら辺のプロファイリングが必要そうな感じ。

本日のツッコミ(全2件) [ツッコミを入れる]

# かぜぶろ [すごく分かりやすい形では書いてないっすね。 CGI.pmにはundocumentな機能があったりしました。]

# おいぬめ [確かにあれだけでかいモジュールならundocumentedな事柄もいっぱいありそうですね。「ドキュメントのパッチもw..]


2006-08-17 [長年日記]

@ [fswiki] URL生成関数を活用した標準プラグイン群

Wiki->create_url, Wiki->create_page_urlのメソッドってAPI上は定義されているけど全然使われてないよなー、{ページ名}.htmlみたいに対応させるのって結構色んなところ直さなきゃいけないなー、とか思っていたのですが、このパッチで全て解決!素晴らしいです。CVS上では取り込まれているらしいので早速週末ダウンロードしてみよう。

本日のツッコミ(全2件) [ツッコミを入れる]

# たけぞう [あのパッチでも全部は修正しきれていないですね。少しずつ直さないと…。]

# おいぬめ [ほんとだ。grepしてみましたがまだ少し残ってますね。でも主要な部分は直ってるっぽいので個人的には大丈夫そうです。直..]


2006-08-18 [長年日記]

@ Unix系のエディタで一括インデントする(emacs編)

M-x indent-region

@ Unix系のエディタで一括インデントする(vim編)

僕はvim使いではないですが。

V G =

2006-08-20 [長年日記]

@ [apache] mod_cache,mod_disk_cacheで高速化

Apache 2.2からはそれなりに安心して使えるようなので、この日記を動かしているmod_proxyサーバに試しにインストールしてみました。staticに組み込むのもどうかと思ったのでDSOでコンパイル。

$ export CFLAGS="-O3"
$ ./configure --prefix=/usr/local/httpd_proxy \
 --with-mpm=worker \
 --enable-shared \
 --enable-so \
 --disable-asis \
 --disable-cgid \
 --disable-proxy-connect \
 --disable-proxy-ftp \
 --disable-proxy-ajp \
 --enable-modules='rewrite action vhost-alias proxy proxy_balancer proxy_http' \
 --enable-mods-shared='ssl headers deflate cache disk_cache mem_cache'

ちなみにこの日記のサーバは↓みたいな感じでmod_proxyサーバとmod_fcgidサーバに分散されています。mod_fcgidサーバが生成した動的コンテンツをmod_proxyサーバでキャッシュしてしまおう、というのが今回の狙いです。

diary.lampetty.net ---> +-- mod_fcgidサーバ1
                           |
                           +-- mod_fcgidサーバ2

httpd.confはこんな感じで設定。

LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
 
<IfModule mod_cache.c>
<IfModule mod_disk_cache.c>
    CacheEnable disk /
    CacheRoot "/var/cache/httpd_proxy/disk_cache"
    CacheMaxFileSize 128000
    CacheMinFileSize 64
    CacheDirLevels 4
    CacheDirLength 5
</IfModule>
</IfModule>

んで、キャッシュの設定する前と後で ab でベンチを取ってみました。以下はキャッシュ設定前。

$ ab -n 50 -c 3 http://diary.lampetty.net/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
 
Benchmarking diary.lampetty.net (be patient).....done
 
 
Server Software:        Apache/2.0.55
Server Hostname:        diary.lampetty.net
Server Port:            80
 
Document Path:          /
Document Length:        23978 bytes
 
Concurrency Level:      3
Time taken for tests:   43.483784 seconds
Complete requests:      50
Failed requests:        1
   (Connect: 0, Length: 1, Exceptions: 0)
Write errors:           0
Non-2xx responses:      1
Total transferred:      1190600 bytes
HTML transferred:       1175994 bytes
Requests per second:    1.15 [#/sec] (mean)
Time per request:       2609.027 [ms] (mean)
Time per request:       869.676 [ms] (mean, across all concurrent requests)
Transfer rate:          26.72 [Kbytes/sec] received
(略)

キャッシュ設定後

$ ab -n 50 -c 3 http://diary.lampetty.net/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
 
Benchmarking diary.lampetty.net (be patient).....done
 
 
Server Software:        Apache/2.0.55
Server Hostname:        diary.lampetty.net
Server Port:            80
 
Document Path:          /
Document Length:        23978 bytes
 
Concurrency Level:      3
Time taken for tests:   2.642869 seconds
Complete requests:      50
Failed requests:        0
Write errors:           0
Total transferred:      1214651 bytes
HTML transferred:       1198900 bytes
Requests per second:    18.92 [#/sec] (mean)
Time per request:       158.572 [ms] (mean)
Time per request:       52.857 [ms] (mean, across all concurrent requests)
Transfer rate:          448.75 [Kbytes/sec] received
(略)

ご覧の通り、43秒→3秒弱なのでです。ディスクにキャッシュするだけでもこんなに速いとは。20%ぐらい速くなればいいかなーなんて控えめに思っていたので本当びっくりです。あとは安定して動いてくれることを祈るのみ。

@ [life] 禁煙

えー、昨年の3月からずっと禁煙しているのですが、気付いたら吸わなかった煙草が10,000を超えました。正直こんなに完璧に卒業できるとは思ってなかったのでちょっと感動。

開始日時 2005年 3月 22日 1時 0分
経過時間 1年 4月 29日 12時間 56分経過
吸わなかった煙草 10330本
浮いた煙草代 139455円
(原価 59762円  たばこ税+消費税 79693円)
延びた寿命 35日 20時間 50分

でも寿命は35日しか増えてないのね。。。

@ [tdiary] ヘッダー/フッターのレイアウト変更

しました。なんかイマイチいいレイアウトが思い浮かばないので迷走中ですが。んで、今さらですがAdSense入れさせてもらいました。このサーバの電気代ぐらい賄わさせてもらえればと。


2006-08-24 [長年日記]

@ [cpan] HTML::Templateの便利な機能

Perlのテンプレートエンジンの一つにHTML::Templateというものがあるのですが、ドキュメントを今までちゃんと読んでなくって気付かなかった便利な機能があったのでメモ。

HTML::Template->new()に loop_context_vars というフラグをセットすると、タグの中でリストの要素が奇数番目なら __odd__ という変数が 1 になったり、ループカウンター的な __counter__ が定義されたりします。これを使えば、例えば一覧データを表示するときに背景を白と黄色の交互に表示したい、なんていうことが簡単にできます。

use HTML::Template;
 
my $tmpl = HTML::Template->new(
    filename => 'hoge.tmpl',
    loop_context_vars => 1,
);
$tmpl->param(list => \@somelist);
print $tmpl->output;
<table>
<TMPL_LOOP NAME=list>
<tr style="background-color:<TMPL_IF NAME=__odd__>white<TMPL_ELSE>#ffffdd</TMPL_IF>
<td><TMPL_VAR NAME=hoge></td><td><TMPL_VAR NAME=fuga></td>
</tr>
</TMPL_LOOP>

みたいな感じ。

会社では当たり前のように使っているモジュールなのに、入社1年強でようやっと気付きました。。。よく使うモジュールのドキュメントは隅々まで読んどけ、ってことですね。

追記: $tmpl->param(list => @somelist); となっている部分を $tmpl->param(list => \@somelist); に修正しました。


2006-08-25 [長年日記]

@ LAMP vs. LAMP──mod_perlとmod_phpのパフォーマンス比較

なんかテストしている環境が微妙に古いのが気になります。あとmod_perlはModPerl::PerlRunを使ったのか、ModPerl::Registryを使ったのかが書いていないですねー。そもそも、あのレベルのプログラムでは偏った結果しか出ないと思われますが、それで出てきた結論が

PerlでもPHPでも、どちらでもよい。

って、、、いったいどうなんでしょう。


2006-08-29 [長年日記]

@ [perl] qr演算子

Perlでqrといういわゆる正規表現のパターンを生成する演算子があるのですが、これをrefしてみると'Regexp'というものが返ってくることを今日始めて知りました。

$ perl -e 'print ref(qr/hoge/),"\n"';
--> Regexp

これを利用すると

#!/usr/bin/perl
 
my @list = ('/index.html', qr#^/abc#, qr#^xyz#);
 
for my $pattern (@list) {
    if (ref($pattern) eq 'Regexp') {
        if ($ENV{REQUEST_URI} =~ $pattern) {
            ...
        }
    }
    else {
        if ($ENV{REQUEST_URI} eq $patern) {
            ...
        }
    }
}

みたいな感じで正規表現による部分一致とeqによる完全一致をごちゃまぜにリストに突っ込んでおけるのでちょっとだけ便利。


Bookmark: あんてな | ぶっくまーく | 覚え書き | Project Amateras | ExcelPettyCashBook | FreeStyle Wiki

2002|10|11|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|11|12|
2008|01|02|03|04|05|06|07|08|10|11|
人気ブログランキング - おいぬま日報(不定期)