May
26th,
2004
明天早上,就要論文口試了,剩下的幾個小時,既是緊張、也是興奮。
對於論文的檢查總覺得有不周密的地方,很害怕被老師責罵~~是緊張
對於學生生涯即將面臨到短暫的結束(短時間也沒有進修的打算)~~是興奮
不論未來是如何,閉上眼睛,好好的享受最後的學生生涯~~最後的考驗吧
P.S. 看到本篇~若在5/27中午之前,請向天空為我祈禱
繼續閱讀
May
24th,
2004
當我之前介紹Blogrolling時,一邊抱怨著他無法方便的使用中文輸入的時候,好心的卡西蒂小姐跟我介紹到MARKROYBOY在他的BLOG曾經有提過的del.icio.us(美味書籤),跟之前介紹Blogrolling一樣,del.icio.us(美味書籤)不僅可以管理好你所記錄的BOOKMARK,更可以讓你的BLOG去讀取你所存取BOOKMARK來變成像我首頁一樣的東西。
至於要怎麼申請與使用在你自己的BLOG之上的方式,MARKROYBOY在他的BLOG有講解得相當詳細,建議大家可以去上面看看,在此我主要介紹到一個功能,就是美味書籤提供的相當多功能中的right
click context-menu(也就是利用右鍵來增加你的網址),所有步驟如下:
首先建議各位先連接到right
click context-menu
下載REG檔post-to-del-icio-us.reg(也就是系統登錄檔)
利用另存新檔下載後,連按兩下滑鼠,將他加入到你的登錄之中
然後關閉所有的瀏覽器,重新打開之後,當你看到喜歡的網頁,就按下右鍵,就會出現以下的東西
P.S.
第一次使用的時候,可能會請你輸入你所註冊的位置,請千萬記住要輸入『http://del.icio.us/你註冊的名字』(記住要打入全部,不然以後會全部錯誤,直到你將利用這個鍊結,將COOKIE刪除,之後解除掉該REG,重新安裝之後才會成功唷!!
繼續閱讀
May
24th,
2004
關於利用C語言撰寫CGI程式的部分,這也是之前人家面試的時候,所詢問我的另外一個問題,經過這幾天上網找資料,並且撰寫之後,將一些心得整理出來,希望能幫助到有一些疑問的人。其實利用關鍵字『C語言、CGI、GET、POST』還是可以找到蠻多相關的網頁,大部分的資料都嫌老舊,並且都是由同一個作者撰寫而出(不過倒是有蠻多人複製在自己的網站上面–_____–”“),所以在此為各位整理一些概念,而繁瑣的程式碼(關於將STRING去spilit並且找出變數對應值)就不再詳述,可參考以下這個網址,在這裡只專注於觀念上的敘述,希望帶給大家一些基本的概念。
利用C語言撰寫CGI程式
CGI( Common Gateway Interface)
**1.放在可以執行的地方
**不論哪種網頁伺服器的主機(IIS、Apache),對於檔案可否執行(execute)的權限管理相當嚴格,尤其是Apache,要由網路上執行某些檔案(通常是CGI),都必須透過,httpd.conf
這個檔案裡面的設定才行(通常預設是 cgi-bin/ )
。另一方面,對於IIS的設定就方便多了,只要啟動IIS
Service將該目錄可執行的權限打開,就可以執行CGI程式。
P.S. 算是FAQ的問題,請注意即便可以執行
C語言的請編譯好用修改權限為可以執行的檔案。
**2.C語言中CGI裡面的Hello World!!
**在這裡要跟大家講解對於網頁而言,其實與一般的C語言程式沒有兩樣,重點在於輸出與輸入的介面(UI)。相較於一般的C語言程式,利用C來撰寫的CGI其輸入與輸出都不一樣,首先在輸出方面,最不一樣的就是CGI有以下的輸出
printf (“Content-type: text/htmlnn”);
這個就是代表這是一個網頁的程式,記住”Content-type:
text/htmlnn”這段文字儘量不要修改,並且連空白都要注意好(沒有注意好,網頁伺服器會誤認為其他可執行檔案而變成可以下載,而非當成CGI程式),所以根據這個,以下為一個基本的CGI程式
//
// File Name test1.cpp
//
#include
#include
int main(int argc, char* argv[],char *envp[] )
{
printf("Content-type: text/htmlnn");
printf("Hello___World");
}
</td>
</tr>
</table>
各位可將此程式編譯(gcc -o test1.cgi test1.cpp)之後,放在可以執行的目錄下。
**3.CGI中參數的傳入**
如同之前所敘述,CGI程式與一般的程式最大的差別在於資料擷取的不同,網頁資料的擷取上主要有兩種,分別是透過GET與POST。這兩種可以透過表單函數下去設定,在此引用[Form與CGI的綜合運用](http://www.cc.nctu.edu.tw/~claven/course/www/html_tutorial/formcgi.htm)中作者所畫的一張圖,可以清楚的瞭解變數在此轉換的差別。
[

](http://www.evanlin.com/blog/archives/0520/img00003.gif)
根據以上的圖,有兩一個系統參數可以辨別參數傳過來的方式,就是(REQUEST_METHOD),裡面會儲存傳入變的的方式,利用以下一個簡單的程式可以抓取所有的環境變數:
#include
int main(int argc, char* argv[],char *envp[] )
{
printf("Content-type: text/htmlnn");
for(int i = 0; envp[i] != NULL; ++i ){
printf(envp[i]);
printf("");
}
}
</td>
</tr>
</table>
**傳值為GET的取值法:**大家亦可透過[範例程式](http://www.evanlin.com/cgi-bin/g1.cgi)去看,若是在網址列後面輸入變數(?aa=1&bb=2)即可觀察到變數QUERY_STRING裡面百的就是我們所輸入的變數值,在根據裡面的資料去PARSE即可瞭解。若要[使用表單的範例](http://www.evanlin.com/get.html)請看這裡,[若要看詳細CGI程式碼,請看這裡](http://www.evanlin.com/get.txt)
**傳值為POST的取值法:**若是透過的方式所傳遞過來的參數,在CGI程式之中,會被當做是Standard_input也就是當成外在輸入(可用getch,
gets來抓取),然後在一個個去變數去作PARSE的動作。以下會[有一個範例](http://www.evanlin.com/post.html)的表單傳遞到變數去。[若要看詳細CGI程式碼,請看這裡](http://www.evanlin.com/post.txt)
其實對於字串的PARSE部分,應該有許多寫好的函示可以應用,不過重點還是在於兩種輸入方式對於程式處理上的不同。(切記:GET=>Query_String;
POST=>Std_Input)
**參考資料:**
1.
[Form與CGI的綜合運用](http://www.cc.nctu.edu.tw/~claven/course/www/html_tutorial/formcgi.htm)
2.
[用C語言進行CGI程序程式](http://moon-soft.com/e_commerce/soft/book/ccgi.htm)
3.
**[Win32下apache,perl环境建立](http://www.csdn.net/develop/Read_Article.asp?Id=6568)**[ BigApple(原作)](http://www.csdn.net/develop/Read_Article.asp?Id=6568)
4.
[CGI範例與寫作](http://www.cs.ntust.edu.tw/~huang/CGI/CGIbyC.htm)
繼續閱讀
May
22nd,
2004
今天去真理大學參加研討會,算是第二次參加研討會吧,所以整個流程上算是有一定的瞭解.整個研討會下來,一個感受是,透過學術的交流,其實對於自己的論文品質信心度會增加,也可以間接瞭解到每間資管所在研究領域上有極大的差異與不同.
而在週五的下午也將論文的完搞寄送給每一位評審委員,等待著下週四的口試.而工作也算是確定好了.
不過隨著學生最後一段生涯的尾聲,慢慢的有一些小小的感嘆吧.
繼續閱讀
May
19th,
2004
感謝網友『阿仁』對於我BLOG裡面程式碼的訂正,在參考過『More Effective C++』中,對於指標使用上的補充順便加入Reference的一些資料。所以一併將這些資料整理在這裡,順便提一下今天侯捷老師講解一些關於Reference Counting 的概念。只能說很多東西要不斷的複習,不然真的都會遺忘,這幾次的面試有很多間公司都搞砸了也就是因為這個原因,原本五專時代都記得的東西,因為許久沒有使用,真的都忘的乾乾淨淨。 **指標(Pointer)與參照(Reference) **在C語言中,雖然指標與參照在使用上極為類似,但是實際上有許多地方式都是不同的。我將這些不同做成以下列表出來: <table cellspacing="1" border="1" width="62%" > <tr > 指標(Pointer) (type *p) 參照(Reference) (type &p) </tr> <tr > 記憶體配置 配置指標記憶體(4Byte) 不配置記憶體,本身為別名(Alias) </tr> <tr > 初始值給定 可以後來指定(不建議,但是允許這樣給值) 必須在變數成立的時候,直接給定初始值 </tr> <tr > 內容值(p) 代表一個記憶體位置,指向給定的目標值 直接代表目標值 </tr> <tr > 設定位置 (目標值Q) p=&Q p=Q (在此為將Q另外設定一個名字p) </tr> <tr > 給值 (目標值Q) *p=Q (將Q的值給*p) p=Q (在此為將Q另外設定一個名字p) </tr> </table> 根據以上的表格,順道提到一般課本常提到的Call by address與 Call by reference的參照方式,撰寫如下: <table cellspacing="1" border="1" width="57%" > <tr > Call by Address (use Pointer) Call by Reference (use Reference) </tr> <tr > #include void fun1(int * p, int * q) { *p=*p+*q; } void main() { int i=3,j=4,k; fun1(&i,&j); cout <<i; } </td> #include void fun1(int & p, int & q) { p=p+q; } void main() { int i=3,j=4,k; fun1(i,j); cout <<i; } </td> </tr> </table> 透過這個列表,可以清楚的兩者的差異,所以在之前文章所提到的錯誤為: int x=10; int *v; *v=x;; 在此錯誤為,由於我的指標 *v 並沒有初始化指標,所以v的值是一個系統給的亂數(或是之前變數留下來的資料),其實這樣去指定是相當危險的一件事情。所以要設定v去指定x的時候,應該使用 v=&x 去設定一個位置在v之中。之前會這樣想也因為我對於字串指標的設定有一點混淆 char *s="test ~~~ string~~~"; 像這樣的句子,雖然也是起使一個指標,但是由於電腦會先根據字串"test ~~~ string~~~"去分配一個位置給他,然後再把位置指定給s ,所以不需要再配置一次位置(記得這個問題在趨勢與友立似乎也一直被問到~~) 但是這裡順道一提 char *s="test...
繼續閱讀
May
19th,
2004
對於難以管理的友站鍊結,我也決定使用BlogRolling了,至於怎麼使用,我想憂鬱馬戲團上面的教學實在很詳細。此外,身邊的人也很多人這樣使用,不過規勸想使用的人~~~他對中文的支援實在鳥到受不了,每次輸入中文都得切換編碼到[UTF-8],仔細思考阿~~
就醬~~~
繼續閱讀