我也要學習『惜字如金』

一杯咖啡,看著字字如金的論文

(圖片:喝杯咖啡,慢慢檢驗著論文)

感謝之前有網友來鼓勵我多投幾個研討會,不過今天倒是收到一些好消息,讓我的心情瞬間好像到了天堂一樣,相當的開心。首先,有間T公司(外商公司、軟體產業,這樣應該知道是那間吧?)的第一階段筆試,我終於給他考過了,真是好險,這一些也是經過許多公司考出來的結果,到了後面幾間公司,考試的結果也越來越好(前幾家真的是太久沒看,之後努力K程式語言之下,總算有些記憶慢慢恢復),面試的態度自然而然會越來越自然(因為知道該怎麼談了吧~~~),再來我去景文的研討會文章也上了,其實也算是將心中一塊大石頭放了下來(因為老師希望每位同學都要有上研討會~~~)

講完了這兩天的近況,記得我之前看過Jedi大大的一篇關於『惜字如金』的文章,其實很感慨良多,漠然回首去看自己每一篇的Blog,內容乏善可陳,若要提到有關於將每一個文字之間掌握的最好的,在我看過的Blog之中的莫過於Chiron的30 sonthing,他也真的算是我看過的『字必慎重』的一位代表,很多時候不僅是閱讀他具有內涵的文章,連他所回的迴響也都透露出他寫作的風格,讓我十分的嚮往,看看自己寫下來的一些心情文章,世界實在小的可憐,也不知道為什麼最近的心中總是空蕩蕩的,腦袋瓜裡直直希望能早點畢業,早點能作一些自己喜歡的事情,於是啥也不想,啥也不作~~~

由於這個Blog的人氣慢慢有在提升,最近有一些人開始寫信詢問我是否可以用blog來建立個人網站,這個問題也讓我想起自己當初會將許多資料慢慢轉移到Blog的一些動機『我想用Blog來幫我作一種知識管理』,也就是藉由自己慢慢的所學到的資訊慢慢的紀錄下來,並且透過有條理、有系統的整理,讓整個Blog變成變成個人的形象網站(或許像Zonble一樣)。或許等這一段時間過後,我會慢慢的將自己個人網站上許多研究性的文章,或是一些作品慢慢的移植到這個網站來,並且逐步的去取代我的個人網站

 

是『重複』而非『重覆』~~

image-20210827123031164

中國字真是博大而精深的,尤其最近在打中文的論文上,更是有這種深刻的感受。因為許多字的用法,其實都被大家所通用化了,也就是本來的意義可能不是這樣,卻在大家經常用錯的情況下,『順理成章』的出現了新的用法。

拿這個詞來說好了,如過要形容有兩個一樣的事物,我們都會用『重ㄈㄨ』來講,但是那個『ㄈㄨ』是用那個字呢?印象中,我是用『重複』來代表有多個一樣的事物,但是常常有人將他們寫作為『重覆』,於是我去查了『教育部異字字典網站』,裡面告訴我們結果如下,頁面上的內容如下:

​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​
字號 ​ ** ​ A03744** ​ ​ 正字 ​ ** ​ 【複】衣-09-15** ​
​ 音讀 ​ ​ ​ ㄈㄨˋ ​
​ 釋義 ​ ​ 有夾裡的衣服。說文解字:「複,重衣也。」三國志.卷  十一.魏書.管寧傳:「寧常著皁帽,布襦褲,布裙,隨  時單複。」 ​ 重疊。文選.張衡.東京賦:「複廟重屋,八達九房。   」宋.陸游.遊山西村詩:「山重水複疑無路,柳暗花   明又一村。」  繁雜的。與「單」相對。如:「複雜」、「繁複」、「   複比」、「複數」。 ​ 再、又。如:「重複思考」。 ​

而大家常用錯的重『覆』的註解如下:

​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​
字號 ​ ** ​ A03765** ​ ​ 正字 ​ ** ​ 【覆】襾-12-18** ​
​ 音讀 ​ ​ ​ ㄈㄨˋ ​
​ 釋義 ​ ​ 翻倒、傾倒。如:「車翻覆了。」、「水可載舟,亦可   覆舟。」論語.子罕:「雖覆一簣,進,吾往也。」漢   書.卷四十八.賈誼傳:「前車覆,後車誡。」  反轉。如:「反覆無常」、「翻來覆去」。  毀滅、消滅。如:「傾覆」、「顛覆」。論語.陽貨:   「惡鄭聲之亂雅樂也,惡利口之覆邦家者。」新唐書.   卷一三六.李光弼傳:「光弼用兵,謀定而後戰,能以   少覆眾。」  回、還。同「復」。如:「答覆」、「覆信」。文明小   史.第二十九回:「這時適逢瓜代回國,到京覆命,請   假修墓來的。」  詳察。舊唐書.卷一一○.鄧景山傳:「以鎮撫紀綱為   己任,檢覆軍吏隱沒者。」  遮蓋。如:「覆蓋」。莊子.德充符:「夫天無不覆,   地無不載。」聊齋志異.卷五.陽武侯:「見舍上鴉鵲   群集,競以翼覆漏處。」  隱藏、埋伏。左傳.桓公十二年:「楚人坐其北門,而   覆諸山下。」魏書.卷八十九.酷吏傳.李洪之傳:「   乃夜密遣騎分部覆諸要路,有犯禁者,輒捉送州。」 ​ 重、再。同「複」。如:「重覆」。 ​

 

image-20210827123057443

image-20210827123129493

根據以上的意思,似乎大家將『重覆』用錯,用習慣之後,所以順理成章的也將這個詞放入了辭典之中,不過『國語辭典』內卻沒有這樣的詞,所以每日一辭就是這樣阿,請大家不要跟我一樣用錯阿~~~~ 是『重複』而非『重覆』~~

一些簡單的C++進階用法

在程式語言之中,C++一直是我最熟悉的語言之一,也由於之前在五專時代曾經寫過物件導向SCSI驅動程式的經驗,讓我的C的程式語言能力有一定的水準。不過自從上了大學之後,就一路忙著學習著Linux的架設與網頁程式(PHP,ASP,ZOPE…等)其實C++已經忘記的差不多。所以最近去幾家公司面試的時候也著實讓我吃盡了苦頭。

由於我之前去許多家公司面試軟體研發工程師(RD)的職位,也由於我本身喜歡挑戰新的領域與事物,於是我在面試的時候,全部避開之前熟悉網站程式設計或是Linux的架設部分,而盡量選擇系統軟體程式設計師或是LINUX的程式設計師。所以去每家公司自然而然要考一些基本的C++基礎與一些程式設計的概念。或許大家看到這邊,會覺得很簡單,C++不就是基本的程式概念,有哪一些需要學習呢?但是自從我去幾家軟體公司面試以來,有一些題目還真是有點刁鑽與難懂,明明是很簡單的概念,卻往往容易疏忽而犯錯。以下就將幾題我之前去面試的題目提供出來,你又能答對幾題呢?

 

</table>
1. #include void main() { int i=3,j=5; if ((i=3)||(j=6)){ cout <<"i="<<i<<" j="<<j;} } </td> </tr>
Q: What is the output? i=?? j=??
</table>  
2. #include class C1 { public: int i; C1( ){ cout <<"1--------"<<endl;} ~C1( ){ cout <<"2--------"<<endl;} }; class C2 { public: int i; C2(){ cout <<"3--------"<<endl;} ~C2( ){cout <<"4--------"<<endl; } }; int fun1( ) { static C2 aa; C1( ); cout <<"test_function--------"<<endl; } void main() { int x=0; C1 c; C2 * v; cout <<"test1--------"<<endl; *v=C2( ); **v=&C2( );** cout <<"test2--------"<<endl; fun1( ); v->i =111; cout <i<<endl; } </td> </tr>
Q: What is the output?
3. Static i; Global j;
Q: What is difference between i,j?? and what is difference between Static and Global??
 
4. string s1("test1"); string s2("test2~~~"); string & rs=s1; string * ps=&s1; cout <<"rs1="<<&rs<<" ps1="<<*ps; rs=s2; //_Label 1_ ps=&s2; //_Label 2_ cout <<"rs2="<<&rs<<" ps2="<<*ps;
Q: What is the output aboute between Label1 and Label2?
  **解答1:** 第一題的答案是 i=3 j=5,並不會執行 j=6 這個給定值,由於C++是左手邊優先(Left hand side),所以當OR( || )給值出現的時候,所出現的就是第一個成立就不再往下看。所以並不會執行到 j=6 自然而然 j=5 **解答2:** 針對這一題,可真是難倒我了,答案就是 1--------- test1----- 3--------- 4--------- test2----- 3-------- 1-------- 2-------- test_function---------- 2--------- 4--------- 在類別的建構者函數與解構者函數之中,會呼叫到建構者函數就是當物件成立的時候,所以當 C1 c; 的時候就會呼叫 C1 的建構者函數。但是 在建立類別指標的時候(物件指標)並不會呼叫建構者函數與解構者函數,反倒是在指向位址時所使用的 C2( ) 所代表的就是將『類別當成靜態函數來使用』這樣一來可以讓指標去指定該物件,但是由於是當成函數使用所以 C2的建構者函數與解構者函數都會一併執行。而在Scope方面,由於 Static 的Scope 是最大的,所以相對的解構者函數也會比較慢出現~~~ **解答3:** 在Scope方面,大家都知道 Static 與 Global的用法,就是比起一般區域變數的Scope都還大,但是這兩個到底有什麼差距呢?原來,比起來Global比Static 更廣大的Scope,也就是 Static 代表該變數的 Scope範圍到『整個檔案』,但是 Global卻是橫跨數個檔案,皆可以呼叫Global的參數(只要使用 extern來呼叫即可~~~)所以大家都會忘記,其實 Global的範圍才最大,但是記得使用外部檔案的變數還是要宣告一下。 **解答4:** 這一題只要是在考『指標』(pointer)與『物件化身』(reference)兩者的差別,根據去查書『More Effective C++』裡面有提到,其實兩者用法很像,確有以下的不同 * Reference 沒有空值(NULL)存在 * Pointer 的位置可以變動而 Reference 則否 所以以上的題目中 rs =s2 是將 s1中的值改為 s2的數值,而 ps=&s2 則是將指標 ps 指向 s2而已罷了~~~     大家對幾題阿?有題目的話歡迎來分享~~~  

開心點把東東打飛吧

最近看到學弟的文章,講到關於抓取畫面的軟體,還有一些雪人遊戲(我想這些是大家上班的良伴~~),在此為大家整理同一款的雪人遊戲(不過有三個版本啦),順便把畫面抓了下來,給各位參考一下,有空來把壞心情打飛ㄅㄟ~~~~~~

打東東遊戲一覽表

正常版 [

正常版

](http://meph.eu.org/pinguin.swf)

_

http://meph.eu.org/pinguin.swf_

 

精緻版

精緻版

_

http://home.pchome.com.tw/good/pink3158/yetisports1.swf

皆大歡喜版 _

皆大歡喜版

_

_http://www.blueidea.com/articleimg/2004/01/1590/wow.swf

打出去要等他掉下來等好久..一個不小心就打出8971.2了唷~~~

 

碩士班不是過渡嗎?

在烏來拍到的花

<照片:烏來裡春天的一朵小花>

昨天為了研討會忙了一整天,而家中的網路似乎也抗議休息過少似的,就這樣斷線了一天。自從禮拜一得知稿件沒有上ICIM研討會,為了完成老師所要求的,至少上一個研討會才能順利畢業而努力。每天就是不斷的改文章、不斷地找研討會的訊息….。覺得在學校的生活過得有點乏味,也覺得整個學生的最後生涯過的相當的痛苦,每天似乎也把剩餘的學生生涯變成一種等待、等待著離開學校、等待著到社會工作。看著日曆逐漸逼近的論文口試的日子,或許在別人眼中是緊張,但是在我的心中或許有一絲的輕鬆。

當然~很多人都跟我講,到了社會之後,絕對不會比在學校輕鬆,不論是上班的主管管教的態度、或者是加班。但是,或許在我心中對於能早點投入社會是嚮往已久的事情,能夠將自己學習的實際的到職場現實的戰場之中,感到相當的期待所致。也或許是對於現在的學生生涯有點煩悶所致,身為天秤座的我,對於現在日復一日的生活,有點厭倦了~~更討厭被限制著自由的感受…

不過最近看到幾篇網路文章,覺得還不錯~~~希望大家看了也會有相同的感覺~~

> > **生命中沒有過渡** > > > > 和一位留德的老師談起老師在德國的留學生活。 老師:「在德國,因為學制還有一些適應的問題,有些人一待就會待上十年才拿 到博士學位。」 我說:「哇!那好久哦。」對於才二十歲的我而言,十年,不就是生命的一半嗎 ? 老師笑了笑:「你為什麼會覺得那很『久』呢?」 我說:「等拿到學位回國教書或工作,都已經三、四十歲了呢!」 老師:「就算他不去德國,有一天,他還是會變成『三、四十歲』,不是嗎?」 「是的。」我答道。 老師:「你想透了我這個問題的涵義了嗎?」 我不解的看著老師。 「生命沒有過渡、不能等待,在德國的那十年,也是他生命的一部分啊!」老師 語重心長的說。 「啊!我了解了!」 那一段談話,對我的影響很大,提供了我一個很重要的生活哲學與價值觀。 前一陣子工作很忙,學弟問我:「你要忙到什麼時候呢?」 「我應該要忙到什麼時候?或者說到什麼時候我才該不忙呢?」我反問。 「忙碌也是我生活的一部分,重點應在於,我喜不喜歡這樣的『忙碌』。 如果我喜歡,我的忙碌就應該持續下去,不是嗎?」我補充著。 對我而言,忙碌不是生命的「過渡階段」,而是我最珍貴的生命的一部分。 很多人常會抱怨:「工作太忙,等這陣子忙完後,我一定要如何如何...」 於是一個本屬於生命一部分的珍貴片段,就被定義成一種過渡與等待。 「等著吧!挨著吧!我得咬著牙渡過這個過渡時期!」當這樣的想法浮現,我們 的生命就因此遺落了一部分。 「生命沒有過渡、不能等待。」這時,老師的話就會清晰的浮現在我的耳邊。 所以,我總是很努力的讓自己喜歡自己每一個生命階段,每一個生命過程,因為 那些過程的本身就是生命,不能重來的生命。

STL學習-Vector初探與學習心得

Vector是STL容器裡面最簡單的一個,但是在資料結構裡面也鮮少有提到,但是在STL裡面卻時常利用這個資料結構。在這裡擺上我今天學習Vector的一些重點,讓大家分享一下。

  • **引用STLPORT版本 **:stlport4.0在bcb5.5上實做

  • **引用函示庫 **** **:位置: _您安裝STLPORT的位置stlportvector_

  • **實際運作函示庫 **:位置: 您安裝STLPORT的位置stlportstl_vector.h

Vector是一個線性空間,但是為一個可以變動大小的線性空間,在宣告之後整個空間就像陣列(array)一樣為一個連續的線性空間,亦可以在上面進行類似Array的操作(比如說直接給值 a[i]=5 ; 或是直接顯示值 a[i]),而且Vector還可以隨意插入任何一個位置之中,並且使之後的元素均往後退一個(這個在array之中倒是需要實做上去加強的功能),並且最重要的是在Vector之中,他的位置是可以變動大小的。也就是若你一開始宣告的Vector大小為5,但是當你插入第6個元素的時候,整個Vector會自動變更大小到現在的兩倍(10個)。針對這個功能,所以Vector在使用上變的相當的方便,加上STL中泛型的設計概念使得Vector變得更強大,能解決的問題也就更多。整理Vector的特點如下:

Vector特點

  1. 線性空間

  2. 與陣列操作相同

  3. 可以任意插入在任何位置

  4. 若是空間不足,將會自動擴大兩倍的空間

在今天的學習筆記之中,我附上一個自己的範例程式碼,方便各位如果要測試程式的時候一個參考依據:

#include #include #include

using namespace std;

int main() { int i; vector iv(2,9); cout «“iv[1]=”«iv[0]; cout «“iv[2]=”«iv[1]«endl; cout «“size=”«iv.size()«endl; cout «“capacity=”«iv.capacity()«endl; cout «”—————————————–”«endl;

iv.push_back(1);
cout <<"iv[3]="<<iv[1]<<endl;
cout <<"size="<<iv.size()<<endl;
cout <<"capacity="<<iv.capacity()<<endl;
cout <<"-----------------------------------------"<<endl;

iv.push_back(2);
cout <<"iv[4]="<<iv[1]<<endl;
cout <<"size="<<iv.size()<<endl;
cout <<"capacity="<<iv.capacity()<<endl;
cout <<"-----------------------------------------"<<endl;

iv.push_back(3);
cout <<"iv[5]="<<iv[1]<<endl;
cout <<"size="<<iv.size()<<endl;
cout <<"capacity="<<iv.capacity()<<endl;
cout <<"-----------------------------------------"<<endl;

iv.push_back(4);
cout <<"iv[6]="<<iv[1]<<endl;
cout <<"size="<<iv.size()<<endl;
cout <<"capacity="<<iv.capacity()<<endl;
cout <<"-----------------------------------------"<<endl;

for (i=0;i<iv.size();++i)
	cout <<iv[i]<<"--";
cout <<endl;

iv.push_back();
iv.push_back();
cout <<"size="<<iv.size()<<endl;
cout <<"capacity="<<iv.capacity()<<endl;
for (i=0;i<iv.size();++i)
	cout <<iv[i]<<"--";
cout <<endl;

vector::iterator ivite= find(iv.begin(), iv.end(),1);
if (ivite) {iv.erase(ivite);}
cout <<"-----------------------------------------"<<endl;
cout <<"size="<<iv.size()<<endl;
cout <<"capacity="<<iv.capacity()<<endl;
cout <<*ivite;
for (i=0;i<iv.size();++i)
	cout <<iv[i]<<"--";
cout <<endl;

ivite= find(iv.begin(), iv.end(),2);
if (ivite) {iv.insert(ivite,3,7);}
cout <<"-----------------------------------------"<<endl;
cout <<"size="<<iv.size()<<endl;
cout <<"capacity="<<iv.capacity()<<endl;
for (i=0;i<iv.size();++i)
	cout <<iv[i]<<"--";
cout <<endl;


ivite= find(iv.begin(), iv.end(),7);
cout <<iv.begin()<<"**"<<endl;
cout <<ivite<<"==";
ivite= find(ivite, iv.end(),7);
cout <<ivite<<"==";



iv.clear2();
cout <<"-----------------------------------------"<<endl;
cout <<"size="<<iv.size()<<endl;
cout <<"capacity="<<iv.capacity()<<endl;
for (i=0;i<iv.size();++i)
	cout <<iv[i]<<"--";
cout <<endl;

}

解說:這個程式主要就是在測試一些Vector的功能,就是建立一個大小為(2)的Vector,並且不斷插入(pushback)一些數值之後,顯示整個Vector的size(已用的空間)與capacity(整個Vector的空間),而這個也是參考[侯捷老師所寫的書](http://www.jjhou.com/jjwbooks-tass.htm)裡面的範例所打的。

尚未完成:雖然整體的Vector應用已經有一定程度的瞭解,但是總覺得對於空間的配置上,Vector自動擴充到兩倍空間這個特性其實有點浪費空間,也使得一開始的宣告上變的不能使用太大的空間(避免兩倍擴充空間變成龐大空間負擔)。並且Vector在clear之後,擴大的空間無法縮回來,使得整個空間大小變的相當的巨大(往往操作過後,會變的很大),以上兩點是我這幾天希望能修改原始碼完成的,但是由於stlport裡面所用的Vector程式碼與[](http://www.jjhou.com/jjwbooks-tass.htm)裡面的內容有一點點不同,可能這幾天看懂後才開始修改~~~