【Doxygen】Trace Code的好工具

| 0 意見

為了找類似 Javadoc 的工具給 C++用,而發現了 Doxygen ,然後他的好處並不只限於產出文件檔,我非常喜歡拿產出的文件檔來 Trace Code,因為它產出的文件檔不只附上了原始碼(Source Code)還具有超連結,可以很方便的在函數、變數進行上下頁切換,先簡介一下這個好東西在給大家看現成的範例

安裝Doxygen

先到 Doxygen網站下載最新的版本,依照你的作業系統進行安裝

程式碼註解

Doxygen 支援 JavaQT 的註解形式,因此單行註解可以寫成

/// ... 註解 ... //! ... 註解 ...

多行註解可以寫成

/**
*...註解...
*/
/*!
*...註解...
*/

設定Project組態

Doxygen 是靠著一個組態檔在進行文件產出的,而組態檔也只是一個純文字檔,靠著Tag, Value的方式進行設定,以下介紹幾個必要的Tag,其他若有興趣可以上 Doxygen官網查詢。

http://www.stack.nl/%7Edimitri/doxygen/doxygen_intro_cn.html
PROJECT_NAME Project 的名字,以一個單字為主,多個單字請使用雙引號括住。
PROJECT_VERSION
Project的版本號碼。
OUTPUT_DIRECTORY
輸出路徑。產生的文件會放在這個路徑之下。如果沒有填這個路徑,將會以目前所在路徑來作為輸出路徑。
OUTPUT_LANGUAGE
輸出語言。預設為English。1.2.16 版後,您可以使用Chinese-Traditional 來輸出中文繁體的格式。
INPUT
指定載入或找尋要處理的程式碼檔案路徑。這邊是一個表列式的型態。並且可指定檔案及路徑。舉例來說若您有a.c, b.c, c.c 三個檔案。您可使用INPUT = a.c, b.c, c.c 的方式。若您給定一個目錄,該目錄下面所有檔案都會被處理。
FILE_PATTERNS
如果您的INPUT Tag 中指定了目錄。您可以透過這個Tag來要求Doxygen在處理時,只針對特定的檔案進行動作。例如:您希望對目錄下的副檔名為.c, .cpp及.h的檔案作處理。您可設定FILE_PATTERNS = *.c, *.cpp, *.h。    
RECURSIVE
這是一個布林值的Tag,只接受YES或NO。當設定為YES時,INPUT 所指定目錄的所有子目錄都會被處理。     & amp; nbsp;                       
EXCLUDE
如果您有某幾個特定檔案或是目錄,不希望經過Doxygen處理。您可在這個 Tag中指定。   
EXCLUDE_PATTERNS
類似於FILE_PATTERNS的用法,只是這個 Tag是供EXCLUDE所使用。
SOURCE_BROWSER
如果設定為YES,則Doxygen會產生出原始檔案的列表,以供查閱。
INLINE_SOURCES
如果設定為YES ,則程式碼也會被嵌入於說明文件中。     & amp; nbsp;                         
ALPHABETICAL_INDEX
如果設定為YES,則一個依照字母排序的列表會加入在產生的文件中。
GENERATE_HTML
若設定為YES ,就會產生HTML版本的說明文件。HTML文件是Doxygen預設產生的格式之一。
HTML_OUTPUT
HTML文件的輸出目錄。這是一個相對路徑,所以實際的路徑為 OUTPUT_DIRECTORY加上HTML_OUTPUT。這個設定預設為html。       
HTML_FILE_EXTENSION
HTML文件的副檔名。預設為.html。
HTML_HEADER
要使用在每一頁HTML文件中的Header。如果沒有指定,Doxygen 會使用自己預設的Header。
HTML_FOOTER
要使用在每一頁HTML文件中的Footer。如果沒有指定,Doxygen 會使用自己預設的Footer。
HTML_STYLESHEET
您可給定一個CSS 的設定,讓HTML的輸出結果更完美。
GENERATE_HTMLHELP
如設定為YES,Doxygen會產生一個索引檔。這個索引檔在您需要製作 windows 上的HTML格式的HELP檔案時會用的上。
GENERATE_TREEVIEW
若設定為YES,Doxygen會幫您產生一個樹狀結構,在畫面左側。這個樹狀結構是以JavaScript所寫成。所以需要新版的Browser才能正確顯示。
TREEVIEW_WIDTH
用來設定樹狀結構在畫面上的寬度。
GENERATE_LATEX
設定為YES 時,會產生LaTeX 的文件。不過您的系統必需要有安裝LaTeX 的相關工具。   
LATEX_OUTPUT
LaTeX文件的輸出目錄,與HTML_OUTPUT用法相同,一樣是指在 OUTPUT_DIRECTORY之下的路徑。預設為latex。                         
LATEX_CMD_NAME
LaTeX程式的命令名稱及檔案所在。預設為latex。& nbsp;                            
GENERATE_RTF
若設定為YES ,則會產生RTF 格式的說明檔。
RTF_OUTPUT
與HTML_OUTPUT 用法相同,用來指定RTF 輸出檔案路徑。預設為rtf。
GENERATE_MAN
若設定為YES ,則會產生Unix Man Page 格式的說明文件。
MAN_OUTPUT
與HTML_OUTPUT 用法相同,用來指定Man Page的輸出目錄。預設為man。
GENERATE_XML
若設定為YES ,則會產生XML 格式的說明文件。
ENABLE_PREPROCESSING
若設定為YES ,則Doxygen 會啟動C 的前置處理器來處理原始檔。     & nbsp;         
PREDEFINED
可以讓您自行定義一些巨集。類似於gcc 中的-D選項。

實際範例 

以好用的文字編輯軟體 NotePad++ 為例

Image000

在Project Label的地方輸入如下

Image004

Build Label就看你想要產出的文件檔需要有什麼樣的功能作選擇,以我個人而言除了一些HIDE的屬性全部勾選

Image005

Input Label的部份選擇原始碼的來源,Source Browser Label勾選如下就會將你的原始碼一併放到文件中囉!

Image006

再來就是設定一些產出的文件類型,這邊我以 HTML 為例,當然 Doxygen 也可以產生成 Windows Help,不過我還是覺得產出 HTML 效果最好,現在大家可以來看一下產出文件的結果了。

【3D版】新竹三大夜市的小吃地圖

由不知名的高人所整理的,整理的非常詳盡,有清大夜市、新竹城隍廟、花園街夜市等三大新竹夜市,標示之詳細可以說是居家旅遊、休閒散心,必備之良圖啊!

如果看不清楚的話點圖可以放大

清大夜市

image001

新竹城隍廟

image002

  花園街夜市

image003

字串(String)轉換成ASCII編碼

有時會需要進行 ASCII 編碼與文字的互轉,小弟用C++寫了兩個小 Function 以方便進行 String 與 ASCII 的相互轉換,不過轉成的 ASCII Code 是16進位的,若有需要請自行修改


//------------ String to HexAscii -----------------//
//Example: ABCD ==> 41424344
void StringToHexAscii(char *in, char *out){
char *buf = new char(sizeof(char)*2);
string str;
for ( int i = 0; i < sizeof(&in); i++ ) {
char c = in[i];
sprintf(buf,"%X",c); //Dec => Hex
str.append(buf);
}
strcpy (out, str.c_str());
}

//------------ HexAscii to String-----------------//
//Example: 41424344 ==> ABCD
void HexAsciiToString(char *in, char *out){
char *buf = new char(sizeof(char)*2);
string str;
for ( int i = 0; i < sizeof(&in)*2; i+=2 ) {
char c[2];
c[0] = in[i];
c[1] = in[i+1];
int nub = atoi(c);
nub = (nub/10)*16 + nub%10; //Dec => Hex
char cc;
sprintf(&cc,"%c",nub); //int => char
str.append(&cc);
}
strcpy (out, str.c_str());
}

int main()
{
char *cstr = "ABCD";
char cHexOut[8];
char cStrOut[4];
StringToHexAscii(cstr, cHexOut);
cout << "ABCD to Hex is: " << cHexOut << endl;
HexAsciiToString(cHexOut, cStrOut);
cout << "Hex 41424344 to String is: " << cStrOut << endl;
system("pause");
return 0;
}

讓Java Applet跳脫SandBox機制

由於 Java Applet 具有 Sand Box 的安全機制讓它無法存取本機系統上的檔案,也無法對外進行連線(Connection)要讓它能夠跳脫 sand box 的束縛,就是讓 Java 知道這隻程式是合法的,而這個合法的過程是經由使用者所認可的,也就是對 Java Applet進行簽章

 
將程式變成一個 Signed Applet 後,在程式第一次被載入時就會出現類似下面的對話框,詢問使用者是否要接受並執行該程式。

Image003 

而將一隻 jar 檔進行簽章有以下幾個動作:

產生個人的私密金鑰

如果有正確安裝JDK以及設定好JAVA_HOME就可以執行下面Command產生金鑰(Key)

keytool -genkey

Image005

對 jar 檔進行簽章

jarsigner XXX.jar mykey

Image006

如圖所示,我已經對 CnyesWeb.jar 使用 mykey 進行簽章了,關於 Warning: The signer certificate will expire within six months.

代表著簽章在六個月後就會失效,如果要讓產生的key有效期可以超過六個月的話在產生金鑰時要多帶參數 keytool -genkey -validity days
example:
keytool -genkey -validity 36500

 

想知道更多關於 Command 的訊息可以直接下

keytool
jarsigner

就會跑出長長一串的說明啦!

謝金河:選後台股新展望

| 0 意見

分享2008/4/1謝執行長的投資簡報


原來Google Page Creator是會爆流量的

| 0 意見

因為Google Page Creator不限制檔案上傳型態,因此之前一些Blogger上的檔案(如CSSFlashJavaApplet)我都一律上傳到Google Page Creator,但今天我忽然發現這些檔案沒辦法顯示出來,我就上去查看了一下,發現檔案都在啊!點下去不得了居然出現

Image000

蝦毀,原來Page Creator是有頻寬限至的喔!當下我就頓悟了,雖然Page Creator很方便但這張大床畢竟不是給人家睡免錢的,為了下次不要再出現相同的經驗我決定儘速將檔案搬移。不過這並不代表Page Creator不好,只是因該拿來作些短期、小型的活動、簡報頁面網站較為適合。

ThinkFree功能強大的Oline Web Office

| 1 意見

ThinkFree 是一個線上Office的服務提供者,雖然說 Google docOffice Live WorkspaceZoho 都是此類型的服務,但在效果與功能上我還是比較推崇ThinkFree。

採用 Java Applet Ajax 技術,提供了幾近全功能的Office套件,與 Microsoft Office高度相容。每位使用者擁有1GB的免費文件儲存空間,可以將Word/Excel/PowerPoint 文件上傳至 ThinkFree 後,直接在線上編輯或是發佈至文件交換中心,供其他使用者閱讀。

Image000

Image001

ThinkFree 提供了 Writer、Calc、Show,分別對應至 Office Word、Excel、PowerPoint。每個程式還分兩種編輯模式 - 簡易(Quick)模式、進階(Power)模式。簡易模式是由 ajax 技術實做出來,速度較快但功能較為陽春。而進階模式則是由 Java Applet 實做,一開始要花較多時間載入,但外觀與功能則與MicroSoft Office相差無幾。

Image002

本週正式改版新增了以下特性:

  1. 進一步支持在線 / 離線的文件編輯方式,可以將本機端的文件與線上儲存空間同步(Synchronization)
  2. 提供1GB 免費在線存儲空間,用於存放用戶各類的辦公文檔
  3. 共同編輯,由於Web2.0的應用越來越方便用戶之間的合作,因此ThinkFree 顯然不會忽視這一點,新的版本將在多用戶間的協作花大力氣打造更為方便、快捷、良好體驗的協作應用
  4. 採用全新的WYSIWYG-XHTML技術到線上文字處理工具中,推出了全新的輕量級線上媒體編輯工具Note
  5. 支援Mobile的應用,ThinkFree 面向手機用戶將會提供一個特別的版本,大大方便多種客戶端的應用能力
  6. 平台的兼容,採用Java技術新版本的ThinkFree能離線應用於Windows Vista 、Mac OS X、Linux等不同作業系統,支援Microsoft Office 2007的OpenXML格式。

我個人很喜歡ThinkFree Doc的投影片展示功能,以下就是嵌入一份官方的My Office說明文件,給大家欣賞一下效果。