2014年3月31日 星期一

simulation 與 emulation 的簡單分法

simulation
用軟體做的模擬,通常是指純軟體
==========================
emulation
用硬體做的模擬,主要是硬體加上些許軟體的配合

2014年3月28日 星期五

常用 Linux 指令

==================================
​grep -n -r 'Vcpu' ./​
-n 顯示行號
-r 遞迴搜尋
-I do not search binary files
==================================
find ./ -iname 'vcpu*'
-iname 不分大小寫
==================================
ls -lrt
-l use a long listing format
-r reverse order while sorting
-t sort by modification time, newest first
==================================
一般在指令的使用上常會用到重新導向運算元,linux下的重導運算元分為以下幾種:
< 把檔案內容重新導向為標準輸入
> 把標準輸出重新導向到檔案內容中(若檔案已存在,原先的內容會被覆蓋)
>> 把標準輸出重新導向到檔案內容中(若檔案已存在,新的內容會加在舊的之後)
2> 把標準錯誤訊息重新導向到檔案內容中(若檔案已存在,原先的內容會被覆蓋)
2>> 把標準錯誤訊息重新導向到檔案內容中(若檔案已存在,新的內容會加在舊的之後)
&> 把標準輸出和錯誤訊息重新導向到檔案內容中(若檔案已存在,原先的內容會被覆蓋)
==================================

2014年3月27日 星期四

Using std::find_if on a vector of object

std::vector<Req*> RWbuffer;

Req* rm_req;

struct Comp_Req
{
explicit Comp_Req(Req* i):n(i) {}
inline bool operator()(const Req* m) const { return m == n;}
private:
Req* n;
};

it = find_if(RWbuffer.begin(), RWbuffer.end(), Comp_Req(rm_req));

if (it != RWbuffer.end())
{
  /*
  Do something before Req* remove from RWbuffer
  */
  RWbuffer.erase(it);
}else
{
  cout << "Request not found! Cannot remove! " << endl;

}

http://stackoverflow.com/questions/6679096/using-find-if-on-a-vector-of-object

Complete Example of using a string as delimiter to parse (split) a string

/*
** Complete Example of using a string as delimiter to parse (split) a string
**
std::string s = "scott>=tiger>=mushroom";
std::string delimiter = ">=";

size_t pos = 0;
std::string token;
while ((pos = s.find(delimiter)) != std::string::npos) {
token = s.substr(0, pos);
std::cout << token << std::endl;
s.erase(0, pos + delimiter.length());
}
std::cout << s << std::endl;
*/

http://stackoverflow.com/questions/14265581/parse-split-a-string-in-c-using-string-delimiter-standard-c

2014年3月21日 星期五

Blogger Code block _ 文章顯示程式碼區塊

Blogger許多插件需要修改HTML加入一些程式碼(語法),在爬文搜尋blogger功能教學時,常會看到教學文通常會把插件的程式碼框起來,避免和文章內容混合,方便訪客複製語法添加到自己的部落格。

如何在Blogger文章中有顯示程式碼區塊的效果呢?我本身不懂程式語法,搜尋教學和試驗過程花了不少時間。剛開始整段程式碼跑到部落格最上方,改變插入位置修正這個問題,卻又不能正確顯示出區塊,反覆的搜尋&修改,終於順利增加程式碼區塊功能,以下說明如何增加也幫自己留下筆記。

在HTML中插入一段程式碼,CCS程式碼:
.post code {
display: block; /* fixes a strange ie margin bug */
font-family: Courier New;
font-size: 10pt;
overflow:auto;
background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) left top repeat-y;
border: 1px solid #ccc;
padding: 10px 10px 10px 21px;
max-height:250px;
line-height: 1.2em;
}


操作說明:
Blogger 後台 →「範本」→「編輯HTML」。(請先備份範本,觀看範本備份說明)


尋找/* Posts的位置,用瀏覽器尋找( F3) 能快速找到。


CCS程式碼插入/* Posts下方,儲存範本。


想顯示的程式碼需將 < 改成&lt;和 > 改成&gt;,沒有修改符號會被視為要執行的指令,指令執行後就無法順利顯示(備註:&lt;用全形輸入,修改時用半型)。

若是手動修改麻煩,HTML Encoder網頁提供轉換程式碼,可將<>兩個符號自動轉換,將程式碼貼上點擊「Encode」。


編輯文章時在程式碼前後各加上 <code> 和 </code> 就能顯示。


顯示效果如下:
程式碼

參考文章:
[筆記]在文章裡顯示優質的程式碼區-良人的大秘寶
在Blogger文章中插入程式碼-高登工作室

[C++] 如何在template 善用typename ?

在編譯其他人的Program 時發現的。(也多虧這些人有釋出這種奇奇怪怪的code,
我才發現g++ 編譯器在處理template時是怎麼運作的。)
example:
template<typename T>
class A{
public:
    T m_A;
    void funcTest()
    {
        map<T , int> mapTempTable; /* 這部分沒問題, OK! */
        map<T, int>::iterator it;  /* 編譯器會出錯! */
    }
};
第8行如果這樣子寫的話,g++ 編譯器會出錯!硬是要在前面加個typename 變成:
typename map<T, int>::iterator it;
才能夠解決!
這是為什麼呢? 因為:: scope operator 接在它後面的可以是成員變數、函數或是
物件類型。
如果不加上typename的話,編譯器可能會將iterator 誤認為成員變數。
(實際上iterator是一個物件類型)
所以要加上typename,讓編譯器知道這個東西是一個物件類型。
Ref: