ばーろ!!トップページ
 Login
03September 2010

Asyncoreを使ったEchoサーバー

   

Squidに無理矢理キャッシュさせようとしましたが結構難しいのですね。

例えばエントリ番号883のエントリにコメントを追加したときの一般的な処理は次のようになります。
1. ブラウザでコメントを記述してPOST。
2. ブログでコメントデータを受け取ってデータベースの仮更新。
3. ブログはブラウザに対してリダイレクトのレスポンスを出して終了。
4. データベースのほんとの更新(永続化)
5. ブラウザは受け取ったレスポンスを元に返されたURLにHTTPアクセス(エントリ883)

キャッシュサーバーがある場合は次のようになります。
1. ブラウザでコメントを記述してPOST。
2. ブログでコメントデータを受け取ってデータベースの仮更新。
3. ブログはPythonスクリプト(仮りにキャッシャーと呼ぶ)にリダイレクトし終了。
4. データベースのほんとの更新(永続化)
5. キャッシャーはエントリ883にHTTPアクセスしてSquidのキャッシュをリフレッシュする。同時にブラウザに対してリダイレクトのレスポンスを返す。
6. ブラウザは受け取ったレスポンスを元に返されたURLにHTTPアクセス(エントリ883)
7. Squidはリフレッシュ済みのエントリ883を返す。

以上の例は単純な方です。ブログが処理を終了する直前にリダイレクトしているためです。
リダイレクトしない場合、処理終了直前にリフレッシュ要求をださなければいけません。ですが、リフレッシュするのはブログが終了してほんとの更新が完了した後でなければいけないのですね。バーロー!!
・・・つまり、「遺言書」が必要ということになります。

この「遺言書」に相当するのが「asyncoreを使ったサーバ」ということになりそうです(?)
例しにポート:6601番にブラウザからアクセスすると、すぐにレスポンスが返ってきて、何やら動いています。
さすがAsyncです、(Asyncって何?)。
これで、好きなときに好きなコンテンツをリフレッシュして最新の状態にできます。・・・理論上は。

"Asyncoreを使ったEchoサーバー"の続きを読む・・・
Posted by Papasan at 2010/09/03 15:12 | Comments (0) | Trackbacks (0)
02September 2010

Squidに無理矢理キャッシュさせるには?

 

PapaBlogにコメントが追加されたときなど更新があったときは、Squidに(無理矢理)キャッシュまたはリフレッシュさせる。

PapaBlogにコメントしたときの現行の動作
1. ブラウザにてエントリを表示(http://papasan.org/エントリ番号)。
2. コメントを記述してPOST。
3. COREBlogがごにょごにょして、ZODBにコメント追加。
4. 当該エントリをブラウザに返す、このときHTTP_REFERERをもとにRESPONSE.redirect()(HTTPステータスコードは302)しているので、結果的にhttp://papasan.org/エントリ番号/を表示することになる。
このとき、http://papasan.org/エントリ番号/がキャッシュされていれば古いエントリが表示されるのでコメントがついてないように見える。

更新時刻に注目
COREBlogにてコメントするとコメントがエントリのSETとして作成される、作成時刻(Created)しか持っていないようだ。
当該エントリを見てみると同様に作成時刻しか持っていない。
さらに上のCOREBlogオブジェクトを見てみると更新時刻(Last Modified)が変更されている。

Posted by Papasan at 2010/09/02 06:25 | Comments (1) | Trackbacks (0)
01September 2010

Squidにキャッシュさせない方法を確かめる

 

Papasan's HomeのトップページをキャッシュさせたくないのでSquidの TAG:cache を次のようにしてみた。

acl NOCACHE urlpath_regex ^.*VirtualHostRoot/$
cache deny NOCACHE

urlpath_regexの他にACL要素(というらしい)には次のものがあります。
ACL要素 説明
srcソース(クライアント)のIPアドレス
dstデスティネーション(サーバ)のIPアドレス
myipクライアントの接続ローカルIPアドレス
srcdomainソース(クライアント)のドメイン名
dstdoaminデスティネーション(サーバ)のドメイン名
srcdom_regexソース(クライアント)の正規表現パターンマッチング
dstdom_regexデスティネーション(サーバ)の正規表現パターンマッチング
time時間と曜日
url_regexURLの正規表現によるパターンマッチング
urlpath_regexプロトコルとホスト名を除いた部分の正規表現でのパターンマッチです。(ex. http://www.jp/reg_text.htmlの内のreg_text.htmlをパターンマッチするような場合)
portデスティネーション(サーバ)のポート番号
myportクライアントのポート番号
protoプロトコール(http, ftp, etc)
methodHTTPリクエストメソッド(get, post, etc)
browserリクエストしたuser-agentヘッダ(ブラウザ情報)を正規表現でパターンマッチング
identユーザ名での文字列マッチ
ident_regexユーザ名の正規表現でのパターンマッチング
src_asソース(クライアント)のAutonomous System番号
dst_asデスティネーション(サーバ)のAutonomous System番号
proxy_auth外部プロセス経由のユーザ認証のユーザ
proxy_auth_regex外部プロセス経由のユーザ認証のユーザの正規表現でのパターンマッチング
snmp_communitySNMPコミュニティ名の文字列評価
maxconn単一のクライアントIPアドレスからの接続の数の上限
red_mime_typeリクエストの content-typeヘッダの正規表現でのパターンマッチング
arpイーサネットMACアドレスのマッチング
rep_mime_typeダウンロードするコンテンツタイプ(content-type)ヘッダーの正規表現でのパターンマッチング
externalexternal_acl_typeを使って外部のヘルパーのaclを定義します。


確認
ブラウザ: Firefox/3.6.8 キャッシュ機能は無効にしている。
トップページのURL: http://papasan.org/
サーバー構成: Apache 2 → Squid 2.6 → Zope

ブラウザからトップページにアクセスしたとき(2度目以降)の各サーバーのアクセスログ
Apache 2
192.168.24.44 - - 2010-09-01 19:13:18 JST "GET / HTTP/1.1" 200 62980 "-" "Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" "1"

Squid 2.6
01/Sep/2010:19:13:19 +0900   1044 127.0.0.1 TCP_MISS/200 63291 GET http://localhost:3128/VirtualHostBase/http/papasan.org:80/papablog/VirtualHostRoot/ - FIRST_UP_PARENT/papasan.org text/html

Zope
192.168.24.42 - Anonymous [01/Sep/2010:19:13:19 +0900] "GET http://localhost:3128/VirtualHostBase/http/papasan.org:80/papablog/VirtualHostRoot/ HTTP/1.0" 200 63185 "" "Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"

2度目以降もSquid 2.6 から Zope にアクセスするようになったので大成功!!

Posted by Papasan at 2010/09/01 19:35 | Comments (5) | Trackbacks (0)
30August 2010

キャッシュのテスト中

 


「え〜、本日は晴天なり。本日は晴天なり。ただいまキャッシュのテスト中」

・・・なので、何か変だなと思ったときはブラウザの「リフレッシュ」ボタンをクリックしてね。「リロード」じゃないよ。

ほんとだ、ログインしているとキャッシュが無効になっておる。す、すばらしい!!
でも、ログオフすると古いものが表示されてしまう。更新完了時にリフレッシュさせる仕組みが必要かも?

キャッシュのテスト項目
最初は、ブラウザのキャッシュ機能を無効にしておくこと。
1. 出来るだけ全てをキャッシュするテスト。
2. キャッシュしたいもので、キャッシュに置いておく時間の調整(リフレッシュ)。 ← 今ここ
3. キャッシュしたくないもののテスト(認証などに関するもの、フィード情報、カウンター類、天気の詳細情報)。
4. キャッシュしたいけど、なかなかキャッシュされないもの(動画ファイル)のテスト。
5. その他

"キャッシュのテスト中"の続きを読む・・・
Posted by Papasan at 2010/08/30 20:10 | Comments (2) | Trackbacks (0)
29August 2010

画像の明るさを取得するには?

 

Papasan's Home トップページの右側、福岡の天気ですが、現在1時間毎にカメラにアクセスして画像を取り込んでいます。
夜の画像は暗すぎる(当然ですが)ので不要なのですね。
時刻を指定して取り込まないようには出来ますが、これだと季節毎に時刻指定をしなきゃあいけません、面倒ですね。
Python PILを使って、明るさを取得すればいいのじゃないかしら?

「ギークの逆襲」に「輝度値だけ取得したい場合」とあるではないですか(あるではない = ある)!!

RGBでそのまま輝度値を取得したい場合
im = Image.open("lena.bmp")
data =  list(im.getdata())

modeを変換して、輝度値だけ取得したい場合
im = Image.open("lena.bmp")
im2 = im.convert("L")
data =  list(im2.getdata())

画像中のすべてのピクセルの値がひとつのオブジェクトに欲しい場合は、getdataしてリスト型でもらうこの方法が簡単です。逆に、画像中のある範囲のピクセルの値が欲しい場合は、getpixelで範囲を指定して取得するという使い分けをすることになるでしょう。

出典元:ギークの逆襲

課題
  • 夜であっても、「十五夜のようなきれいなお月さまが出ているときは画像を残す」などとすると?

  • 十五夜お月さまが出ている場合、お月さまを拡大する。

  • ♪うーさぎうさぎ がサーバーから流れてくる。

  • ♪うーさぎうさぎ


  • 朝焼けや夕焼けがきれいなときは、撮影間隔を現在の60分から5分にする。


"画像の明るさを取得するには?"の続きを読む・・・
Posted by Papasan at 2010/08/29 08:25 | Comments (9) | Trackbacks (0)
28August 2010

鯖妖怪

 

LAN内のクライアントマシン 192.168.24.44 から Papasan' Home のトップページにアクセスすると、しばらくして決まってサーバーマシンから風鈴の音が聞こえてきます。

風鈴の動画はFlowplayerをブラウザから呼び出さないと再生されません。
ブラウザは起動されていません、サーバーですから。
それともサーバー管理者の耳がおかしくなったのでしょうか?

LAN内のアクセスログを吐き出す設定にして見てみると・・・

"鯖妖怪"の続きを読む・・・

Squid設定ファイル

 

Squid(キャッシュサーバーモード)の設定
しばらく、この状態で運用しながらチューニングしていくことにする。

必要な予備知識
1. 条件付GET(小粋空間)
2. 「条件付きGET」のススメ(Ogawa::Buzz)

"Squid設定ファイル"の続きを読む・・・
Posted by Papasan at 2010/08/28 13:14 | Comments (8) | Trackbacks (0)
26August 2010

ZopeのPythonScriptでRESPONSEヘッダーに書き込んでみる

 

RESPONSEヘッダーなるものがどんなものかプリントしてみた。
一度プリントした後、"Papasan"ヘッダーを書き込んでみる。

REQUEST = container.REQUEST
RESPONSE = REQUEST.RESPONSE
print RESPONSE

RESPONSE.setHeader('Papasan', 'Ojisan')
print RESPONSE

return printed

結果は次のとおり。
HTTP/1.1 204 No Content
Server: Zope/(Zope 2.8.9.1-final, python 2.3.6, linux2) ZServer/1.1
Date: Thu, 26 Aug 2010 13:22:49 GMT
Content-Length: 0


HTTP/1.1 200 OK
Server: Zope/(Zope 2.8.9.1-final, python 2.3.6, linux2) ZServer/1.1
Date: Thu, 26 Aug 2010 13:22:49 GMT
Papasan: Ojisan
Content-Length: 0

Posted by Papasan at 2010/08/26 22:24 | Comments (0) | Trackbacks (0)

Squid(キャッシュサーバー)で自分の首を絞める

 

Squid(キャッシュサーバーモード)を導入して表示が速くなったのはいいのだけれど、キャッシュしたくないものまでキャッシュされてしまいます。
正確に言うならば、キャッシュするのはいいのだけれど更新があったときはキャッシュから返さないでほしい。

例えば、トップページ右中のサムネイル画像など。このままだと夜になっても昼間の画像が表示されてしまいます。
一番困るのは、ブログのエントリやコメント、トラックバックが追加されても表示されないのですよ!!
Squidのrefresh_patternを色々弄ってはみたものの思い通りの表示になりません。

キャッシュポリシー
1. Zopeサーバーの全コンテンツをキャッシュする。
2. 但し、更新されたものはキャッシュはするが、Zopeサーバーのものを返す。

課題
SquidはURL(クエリ部分も含めた?)にてオブジェクトを識別しているようだが、動的コンテンツの場合どうやって更新があったかどうか判断しているのでしょう?

参考サイト
キャッシュ期限モデル

Posted by Papasan at 2010/08/26 20:03 | Comments (9) | Trackbacks (0)


5 clients / 4,490,666 (Since 2003/5/27)