後來放棄 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.35
eval{}
下去處理...)接下來用 Coro 的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}; }
async{}
開平行處理:但你有時候會需要等所有的use Coro; sub { foreach my $key (@allKeys) { async { my $data = $self->get($key); # 這邊是對 $data 處理的 code }; }; }
async{}
都跑完再處理剩下的事情,這時候就要拿 AnyEvent 的 condvar:然後,你會發現打 AWS S3 打太兇時會傳回 500 給你,所以要用 Coro::Semaphore 限制連線數量,並且用 Perl 5.10 之後才有的語法來協助程式管理變數: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; }
其實就是現有的東西套一套而已,不過真的還蠻好寫的... 包一包就能正常運作 :ouse 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; }
順便裝 python-dev,因為編某些程式時可能會用到:apt-get install pip
接著就可以產生環境:apt-get install python-dev
然後自己把virtualenv --no-site-packages python2
.bashrc
內的路徑指過去:(.cshrc
也是類似的方法)接下來就可以在裡面用 pip 裝東西:export PATH="/home/gslin/python2/bin:${PATH}"
雖然沒辦法裝 2.7,但目前 Ubuntu 10.10 提供的 2.6.6 也還算堪用,方法暫時找到這樣...pip install pycassa
eval()
會造成 YUI Compressor 保留變數名稱。當然,這個方法會讓 code 沒辦法看到 function scope 內的資料...// It's global... function myEval(c) { return eval(c); } (function(){ // Now it's local... myEval('...'); })();
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