2010年7月15日 星期四

linux主機空間搬家

近來因為有新人要來,所以必須空出電腦。原本閒置的電腦都被我們拿來當build code server啦。因此必須要把目錄全部搬到新主機上。

Project中有些是自動產生的link目錄。為避免搬過去失效,所以都預先執行make clean清掉,一方面所佔體積也會比較小一點。

接著上傳方式就有很多種了。我在這裡採用rsync:

rsync -rv -e ssh /home/mark/ mark@10.10.10.10:/home/mark

這樣就可以自動同步到10.10.10.10主機上了。其它方式還有SCP這樣的指令可以用

參考資料:
[1] Recursive SFTP Put

2010年7月14日 星期三

Five pitfalls of Linux sockets programming

http://www.ibm.com/developerworks/linux/library/l-sockpit/

這篇文章是IBM上的devleperWork發表的。主要敘述作linux socket programming所會遇到可能忽略的陷阱。我覺得寫得還算蠻不錯的,就做一下筆記。

Pitfall 1.Ignoring return status
socket programming中做有關IO的動作,都會有牽扯到return status,包含了執行狀態的變化,不單單只有成功與失敗兩種而已。我們在寫程式時有時貪圖一時方便,只檢查有需要的狀態,更甚者完全不檢查。這些行為都不太好。

Pitfall 2. Peer socket closure
這段大概講的是要把正確的行為放在正確的區塊中。像他所舉的範例close(sock);放在status==0,其實可以表示已經讀完了跟對方結束兩種狀態。我想,像我們在寫程式有很多case需要作close之類的動作,應該要注意要放在哪邊才能確定close一次,而不會造成多次close的崩潰或是沒有close的memory leak。

Pitfall 3. Address in use error (EADDRINUSE)
進行Socket連接時,使用SO_REUSEADDR屬性,方便當斷線時進入TIME_WAIT狀態時,位址還可以讓其他人使用。

Pitfall 4. Sending structured data
socket可以傳遞binary的資料,理當來說也可以傳遞結構性資料。但是要注意的是雙方的協定是否正確,像是big-endian和little-endian的問題,以免資料還原時無法讀取。我們可以使用現有的協定,像是RPC這類的傳遞資料。

Pitfall 5. Framing assumptions in TCP
注意雙方的buffer大小,應該要同步,以免作多餘的寫入或傳送的動作。

2010年7月8日 星期四

AF_UNIX本地端通訊

在Linux socket programming中,兩個程序作溝通有時會利用同一個port作client-server方式使用。但有時候我們不希望這些port會被外面的人連進來。除了利用防火牆去檔該port,還可以利用本地端通訊來達成。

本地端通訊可以顯而易見的是,有些程序會在檔案系統上利用xxx.sock這類檔案作溝通。在程式上本來指定server listen port的地方改成本地位址。

Linux Socket學習(三)以及 本地通信實例(AF_UNIX) 舉了詳盡的client和server的範例程式。可以參考看看。

2010年7月7日 星期三

XMLHTTPRequest POST

Using POST method in XMLHTTPRequest(Ajax)這篇文章講解了如何利用XMLHTTPRequest來做POST動作。

一開始的範例是使用GET方式送出訊息。可以看到送出的位址其實是url加上參數結合的。決定GET的方法是在.open()裡面決定的。onreadystatechange負責處理接收的事件。GET

var url = "get_data.php";
var params = "lorem=ipsum&name=binny";
http.open("GET", url+"?"+params, true);
http.onreadystatechange = function() {//Call a function when the state changes.
        if(http.readyState == 4 && http.status == 200) {
                alert(http.responseText);
        }
}
http.send(null);

接著的範例就是POST的範例。由於params必須改到HTTP的內文作發送,所以很明顯看到的是http.send送出了想要發送的參數。另外這個範例也補上了http需要用到的header。

var url = "get_data.php";
var params = "lorem=ipsum&name=binny";
http.open("POST", url, true);

//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");

http.onreadystatechange = function() {//Call a function when the state changes.
        if(http.readyState == 4 && http.status == 200) {
                alert(http.responseText);
        }
}
http.send(params);

這篇文章剩下部份還有舉出AJAX包裝好的方法。有興趣可以去看一下。

2010年7月5日 星期一

[PC] Vaio P GMA 500 xp硬解

網路上可以找到很多。一種方法式安裝PowerDVD,另一種是安裝內含PowerDVD codec的pure codec包。我是採用後者,搭配kmplayer和potplayer。

主要方法可以參考【转】 【转帖】高清视频相关知识和 KMPlayer 硬解码(DXVA)设置這篇文章。

主要步驟就是取消內建解碼。加入外部解碼(Cl264dec.ax、Clvsd.ax、Clvc1dec.ax),建議用手動選檔方式加入,我的狀況是會自動搜尋找不到H.264需要的解碼。接著開啟解碼器的DxVA硬體加速功能。最後改變撥放器的渲染效果(VMR7/9)。

渲染效果若選跟vista/win 7一樣的EVR,就會馬上藍屏重開機。VMR7和9可以多嘗試幾個,看哪個效果比較好。

播放時按下tab叫出解碼狀態,看到有dxva作輸出,就是有用到硬體解碼了。

其他參考資料http://www.evolife.cn/?p=42387