後來放棄 distributed lock,透過 memcached 的
add 所提供的 atomic 特性提供很簡單的 mutex,方法在「A simple distributed lock with memcached」有提到,不過這篇文章的標題所提到的 distributed lock 並不太正確,只是普通的 lock...先暫時這樣,繼續往下寫...
add 所提供的 atomic 特性提供很簡單的 mutex,方法在「A simple distributed lock with memcached」有提到,不過這篇文章的標題所提到的 distributed lock 並不太正確,只是普通的 lock...s.pixfs.net 就已經丟上去,以台灣查詢的話,傳回的結果會是台灣固網的 server:;; ANSWER SECTION:
s.pixfs.net. 7009 IN CNAME s.pixfs.net.geo.pixdns.tw.
s.pixfs.net.geo.pixdns.tw. 86210 IN A 60.199.247.98;; ANSWER SECTION:
s.pixfs.net.geo.pixdns.tw. 86400 IN CNAME s.pixfs.net.cdngc.net.
s.pixfs.net.cdngc.net. 30 IN A 66.114.54.30
s.pixfs.net.cdngc.net. 30 IN A 66.114.54.35eval{} 下去處理...)sub get {
my $self = shift;
# S3 的 filename
my $key = shift;
my $bucket = $self->s3->new(
aws_access_key_id => 'xxx',
aws_secret_access_key => 'xxx',
retry => 1,
timeout => 10, # 預設 timeout 30 秒
);
my $r = $bucket->get_key($key);
return $r->{value};
}接下來用 Coro 的 async{} 開平行處理:use Coro;
sub {
foreach my $key (@allKeys) {
async {
my $data = $self->get($key);
# 這邊是對 $data 處理的 code
};
};
}但你有時候會需要等所有的 async{} 都跑完再處理剩下的事情,這時候就要拿 AnyEvent 的 condvar:use AnyEvent;
use Coro;
sub {
my $cv = AnyEvent->condvar;
$cv->begin;
foreach my $key (@allKeys) {
$cv->begin;
async {
my $data = $self->get($key);
# 這邊是對 $data 處理的 code
$cv->end;
};
};
$cv->end;
$cv->recv;
}然後,你會發現打 AWS S3 打太兇時會傳回 500 給你,所以要用 Coro::Semaphore 限制連線數量,並且用 Perl 5.10 之後才有的語法來協助程式管理變數:use 5.010;
use AnyEvent;
use Coro;
use Coro::Semaphore;
sub {
state $sema;
if (!defined $sema) {
# 如果還沒建立的話開 semaphore,數量定為 32
$sema = Coro::Semaphore->new(32);
}
my $cv = AnyEvent->condvar;
$cv->begin;
foreach my $key (@allKeys) {
$cv->begin;
async {
$sema->down;
my $data = $self->get($key);
$sema->up;
# 這邊是對 $data 處理的 code
$cv->end;
};
};
$cv->end;
$cv->recv;
}其實就是現有的東西套一套而已,不過真的還蠻好寫的... 包一包就能正常運作 :o
順便裝 python-dev,因為編某些程式時可能會用到:apt-get install pip
接著就可以產生環境:apt-get install python-dev
然後自己把virtualenv --no-site-packages python2
.bashrc 內的路徑指過去:(.cshrc 也是類似的方法)export PATH="/home/gslin/python2/bin:${PATH}"接下來就可以在裡面用 pip 裝東西:雖然沒辦法裝 2.7,但目前 Ubuntu 10.10 提供的 2.6.6 也還算堪用,方法暫時找到這樣...pip install pycassa
eval() 會造成 YUI Compressor 保留變數名稱。// It's global...
function myEval(c) { return eval(c); }
(function(){
// Now it's local...
myEval('...');
})();當然,這個方法會讓 code 沒辦法看到 function scope 內的資料...
move.pixnet.tw 這種全靜態,而且平常也不會動內容的站台。It would be nice if you have better solution :-)include fastcgi_params; fastcgi_param SCRIPT_NAME ""; fastcgi_param PATH_INFO $uri;
$.getJSON('http://www.example.com/', callback_cb);」改用「$.getJSON('http://www.example.com/?callback=?', callback_cb);」就可以解決 IE 上面沒辦法取得 JSONP 資料的問題,測了一下的確解決了問題...format=jsonp 以外,另外帶 callback=FUNCTION_NAME 的參數即可。P3P header 有設定,IE 也應該都沒問題。apt-get install php5-cgi如果要整個系統升級,用老方法即可:apt-get upgrade或是:apt-get dist-upgrade