2007年8月5日
原本想學MFC,在網上查著查著就被新的技術拉著鼻子走了。尤其是微軟的新技術,吸引力可真夠大的。.net wpf silverlight都是很炫的。再聽到MFC過時的言論,難免有點心荒荒的,靜下來想想,學MFC也沒啥不好的,算法導論和TC++PL還得繼續看,MFC也繼續看,畢竟這個東西已經很完善的,雖然復雜點,但研究研究總有收獲的,那些控件拖來拖去確實讓人很爽,但不明白道理還是讓人很不踏實。所以想來是自己浮躁了,給自己敲敲警鐘,繼續前行
2007年7月27日
由于SmartWin歲數尚輕,網路上資料并不多,只能看著文檔摸索。因此要輕松學習是相當困難的,不過有個設計GUI的可視化環境叫Sally的,俺上sourceforge上下載結果網頁出錯,正當十分泄氣之時,俺瞥見了WxWigets,也是相當好玩的。于是迫不及待的下載下來安裝上,呵呵。一查網上資料還真挺豐富的,起碼有本權威一點的指導書《使用WxWigets跨平臺GUI設計》,呵呵,最可喜的是居然俺一直在用的Dev-C++有一個兄弟Wx Dev-C++,用他來設計是相當不錯的。

生成的代碼
void HTMLEditorFrm::CreateGUIControls()
  {
//Do not add custom code between
//GUI Items Creation Start and GUI Items Creation End
//wxDev-C++ designer will remove them.
//Add the custom code before or after the blocks
 /**/////GUI Items Creation Start

WxStatusBar1 = new wxStatusBar(this, ID_WXSTATUSBAR1);

WxSplitterWindow1 = new wxSplitterWindow(this, ID_WXSPLITTERWINDOW1, wxPoint(0,0), wxSize(400,99));
WxSplitterWindow1->SetFont(wxFont(9, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("宋體")));

WxHtmlWindow1 = new wxHtmlWindow(WxSplitterWindow1, ID_WXHTMLWINDOW1, wxPoint(5,5), wxSize(185,89));
WxHtmlWindow1->SetFont(wxFont(9, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("宋體")));

WxMenuBar1 = new wxMenuBar();
wxMenu *ID_MNU_FILE_1011_Mnu_Obj = new wxMenu(0);
ID_MNU_FILE_1011_Mnu_Obj->Append(ID_MNU_OPEN_TCTRL_O_1012, wxT("&Open\tCtrl+O"), wxT(""), wxITEM_NORMAL);
ID_MNU_FILE_1011_Mnu_Obj->Append(ID_MNU_SAVE_1013, wxT("&Save\tCtrl+S"), wxT(""), wxITEM_NORMAL);
ID_MNU_FILE_1011_Mnu_Obj->AppendSeparator();
ID_MNU_FILE_1011_Mnu_Obj->Append(ID_MNU_EXIT_1016, wxT("E&xit"), wxT(""), wxITEM_NORMAL);
WxMenuBar1->Append(ID_MNU_FILE_1011_Mnu_Obj, wxT("&File"));
SetMenuBar(WxMenuBar1);
…………………
 /**/////GUI Items Creation End
}

void HTMLEditorFrm::OnClose(wxCloseEvent& event)
  {
Destroy();
}

 /**//*
* WxMemo1Updated
*/
void HTMLEditorFrm::WxMemo1Updated(wxCommandEvent& event)
  {
// insert your code here
}

 /**//*
* Mnuexit1016Click
*/
void HTMLEditorFrm::Mnuexit1016Click(wxCommandEvent& event)
  {
// insert your code here
Destroy();
}

雖然沒有smartwin通俗易懂,但面對如此好用的工具,還是很有吸引力的。原理也類似,生成框架,對各個屬性設置,然后對基于事件驅動的話,每個控件都有一個函數,你可以自己定義動作。
Wxwigets的幫助文件查找相應的類和函數是很方便的,所以用他來做俺的小玩意還是比較合適的。
2007年7月26日
2007年7月22日
其實能考進大學的完全能說明你的智商是沒有問題的,當然這并不意味著沒考上大學的就有問題了。這只是個充分不必要條件。
那么為什么有人學習成績好呢,對于任何事情總是能花費很少的勞動而把事情辦好呢,這絕對不是生物意義上的智商問題。這是一種思維習慣上的問題,很多人從小就養成了不良的思維習慣,導致了差異性。有人說我小學多么聰明(當然僅僅從你考試能力上來比較)但是隨著高中到大學,越來越笨了。小學的問題都很簡單,直接按順序思考就行了,久而久之就養成了這種思維習慣,不是說這種思維習慣不好,這是一種非常正常的思考邏輯。但是從小學開始就不斷單一的強化這種思維方式,我們就變的像俗話說的一根筋,拐不了彎。在高中大學題目的復雜度上升,這種思維的弊端就逐漸開始暴露。比如有些題通過反證法可以輕松解決,但是由于習慣,我們順著思考,這將帶來很大的難度。從單純的角度來說你思考的深度比那些用反證法的人強多了,你比他們一定程度上是聰明的,但很不幸,你做出題目的概率比他們小了,這導致了你學習成績差,導致你是個差生。一旦你從心理上接受了這種角色,從此你就真正的差生了,很難翻身。
常聽某某說人生來就決定了你是聰明的還是笨的,這就成為他們每次失敗的理由。這種心態非常使我反感。我向來認為大家是一樣的,不同的是思維習慣和方法。也和人說過我這樣的想法,他們也承認是這個原因,但他認為這就是先天的啊,這種不良的思維習慣是小學教育的悲哀。但并不是不可以改變的。難以改變不應該成為我們偷懶的理由。
其實這個道理一直在我們身邊,而有些人卻要否認。舉個簡單的例子,你拿了問題去問你的老師,那是你思考了很多天都沒解決的問題,這時老師幾句話你就突然明白了,你還是靠你自己的思考把問題解決的,那么你所差的就是老師那幾句話給的思考方向。這種方向是如何得來的呢,無非就是兩個原因,一個是經驗,一個是思維的空間。你得學會自己從另外一個角度思考,這樣就不需要老師這個角色了。很多優秀的人都是善于從不同角度思考問題的,他們不會抱死在一棵樹上。
所以我認為努力思考吧,正向的逆向的,發散的,抽象的,形象的思維方式都要不斷的嘗試。多看看哲學家的文章,我說的不是純粹哲學,我認為真正的哲學是理性的哲學,比如笛卡兒的哲學,他的方法都是抽象于數學,因為唯有數學真正是精確的,正確的。
本文簡單簡介二叉樹的概念,并給出平衡一顆二叉樹的方法
關于二叉樹 現在有N個元素的數組或者鏈表,要查找一個元素必須遍歷數組直到找到元素。假如元素在是數組中最后一個或者數組中不存在這樣的元素,那么很不幸,我們要遍歷整個數組。如果N非常大,那將是非常痛苦的一件事情。 用二叉樹情況就好多了: 1. 更快的查找 2. 增加元素時,元素被自動排列 原理: 在鏈表或數組中,元素一個接著一個,如圖

在二叉樹中情況不太一樣了
 每個元素連著兩個元素,左孩子和右孩子。他們存儲的值的關系有如下規定 Value(left)<Value(middle)<=Value(right)
排序: 在二叉樹中利用遞歸你能很方便的排序 前序遍歷
PrintElement(pTopMostElement)
.
.
void PrintElement(TreeElement* pElement)
 {
if (pElement)
 {
PrintElement(pElement->LeftChild)
pElement->PrintMe()
PrintElement(pElement->RightChild)
}
}

后序遍歷:
PrintElementReversed(pTopMostElement)
.
.
void PrintElementReversed(TreeElement* pElement)
 {
if (pElement)
 {
PrintElementReversed(pElement->RightChild)
pElement->PrintMe()
PrintElementReversed(pElement->LeftChild)
}
}

如何使二叉樹平衡? 添加元素的順序將影響二叉樹的形態,以3,6,4,8,1,9,2,7,5的順序得到

以1,2,3,4,5,6,7,8,9將得到
 有以下方法可以考慮: 1. 以非排序的元素插入元素,不能要求給出的元素是高度不排序的 2. 以一組隨機元素構造二叉樹,然后替換這些元素,然后通過旋轉得到平衡的樹。參考隨機樹。 3. 重構這稞樹
重構整稞樹 1. 把元素拷貝到數組中,以升序排序 2. 清空這棵樹 3. 從數組中高度不排序的選取元素插入樹中可以這樣完成第三步:
 可以遞歸的實現:
// Assuming array ranges from [0..arraySize-1]
GetFromOrderedArray(0,arraySize-1)
.
.
void GetFromOrderedArray(int lowBound,int highBound)
  {
if (hi < low) return;
middlePos = lowBound+(highBound-lowBound)/2
// middlePos is now at the element in the middle
// between lowBound and highBound, so we just add
// it to the tree

AddElement ( theOrderedArray[middlePos] )

// Pick the middle one "to the left"
AddFromOrderedArray(lowBound,middlePos-1)

// Pick the middle one "to the right"
AddFromOrderedArray(middlePos+1,highBound)
}

刪除一個元素
首先要找到要刪除的元素E,有兩種方法: 1. 通過遍歷找到這個元素E 2. 給每個元素一個指向雙親的指針
接下來就是刪除的過程了: 1. 剪斷E與他雙親的連接 2. 將左右孩子所在的子樹同其他元素一樣加到樹中 3. 刪除E
void RemoveElement(TreeElement* theOneToRemove)
  {
TreeElement* pParent = theOneToRemove->GetParent();

// Ok, so it has a parent, then we'll simply just disconnect it.
if (pParent)
 {
if (pParent->GetLeftChild() == theOneToRemove)
 {
pParent->SetLeftChild(NULL);
}
else
 {
ASSERT(pParent->GetRightChild() == theOneToRemove);
pParent->SetRightChild(NULL);
}
}
else
 {
// No parent? Then we're removing the root element.
theTopMostElement = NULL;
}

// Disconnected, now we reconnect its children (if any)
// just by adding them as we add any other node.
if (theOneToRemove->GetLeftChild())
AddElement(theOneToRemove->GetLeftChild());
if (theOneToRemove->GetRightChild())
AddElement(theOneToRemove->GetRightChild());

//Zap the element (if that's what you want to do)
delete theOneToRemove;

}

注解:
通過函數回調 遍歷二叉樹
注:函數回調例如AddElement(theOneToRemove->GetRightChild());
簡而言之,回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用為調用它所指向的函數時,我們就說這是回調函數。 可以把調用者與被調用者分開。調用者不關心誰是被調用者,所有它需知道的,只是存在一個具有某種特定原型、某些限制條件(如返回值為int)的被調用函數。
#內容選自CodeGuru 若理解錯誤,歡迎指正!
2007年7月19日
機器碼真難讀------------->匯編語言-------------->人機之間對了一層:編譯器
偽指令和其他符號(+,/,-,*)-----------無對應機器碼---------->交給編譯器
匯編指令------->有對應的機器碼
存儲器:
指令和數據沒有區別------------>二進制信息
|
|------------------>CPU------------>區別指令和數據
1byte=8bit---------->計算機最小單位
地址總線:低位到高位存儲
數據總線:傳輸速度與位數等比
控制總線:計算機控制能力,讀取寫入等操作
2007年7月16日
2007年7月7日
所有的女人都感覺比男人活得累,為什么呢?因為她們既要獲得一份體面的工作,又要找到一個優秀的男人。而要找到一個優秀的男人,則又要辨別,又要俘獲。大多數女人都不缺乏俘獲男人的本領,可以說女人天生的一切愛好和特質——前者如美容、化妝,后者如害羞、撒嬌等等,都是上天賦予給她俘虜異性的武器。難就難在辨別什么樣的男人是真正優秀同時真正適合自己的男人,女人的一切幸與不幸全部來源于此。
如果把美貌和智慧作為兩個重要參數,對女人的幸福進行排名的話,從好到壞的順序應該是:聰明而又美麗的女人、聰明而不美麗的女人、不聰明也不美麗的女人、美麗而不聰明的女人。一個漂亮女人如果沒有足夠的智慧駕馭美貌帶給她過多的自由度,美麗將是一種沉重的負擔。上帝給女人最好的禮物,不是美貌,而是智慧。
為什么女人會不停地問男人“你愛不愛我”?我想至少有兩個原因。一是女人非常在乎這個男人,二是女人還沒有足夠掌握這個男人。她不知道男人是否真的愛她,不知道他是否當得起她全身心的回報。尤其在女人做出一些重大決定之前,比如同居、結婚、共同買房或者懷孕等等,“你愛不愛我”這個問題被問及的頻度會空前地高。
//當女人不停問你“你愛不愛我”時意味著她在做一個重大決定
如果說男人之間的友誼在于交換社會資源、尋求事業上的共同進步的話,那么女人之間的友誼則在交換自我提高和把控異性的技巧。美容、購物、健身、減肥,這些女人間經常聊的話題,其實質都是如何提高自己吸引或者誘惑男人的能力。不要責怪女人的虛榮,從動物本能的層面上看,女人所做的這一切確確實實對維系愛情、提高婚姻質量做出了巨大的貢獻,雖然男人經常對此不屑一顧。
有人說,衡量熱戀中男女相愛的程度,要看他給她買的東西有多貴重;衡量女人愛男人的程度,要看她給他買的東西有多家常。這種禮物上的行為差異,主要是源于男人和女人不同的價值觀。相對而言,男人更重視金錢,因為在一個商業社會,金錢本身就是社會驅動力的象征。在女人看來,一個男人肯為自己花錢,一則證明他的雄性本領,二則證明她在他心目中的地位——一個肯為自己犧牲社會驅動力的男人,一定是一個義薄云天的好丈夫、好父親。女人需要男人征服世界的能力,也需要他眷顧家庭的意愿。
//趕快賺錢,要不就慘了
男人在婚前的所有優點,比如有錢、浪漫、長得帥、善交際、會追女孩、多才多藝等,在婚后都有可能成為缺點。如果他不幸遇上一個非常愛他、同時又缺乏安全感的女人,那么這些“缺點”就顯得更為明顯。男人所有的特質都應該為我而生,女人經常這樣想,問題是,如果婚后的男人因為安全的需要而變為愚笨無趣,還值得她愛嗎?
//做男人難啊
女人在什么階段最希望男人有錢,在什么階段最希望男人顧家?男人掙多少錢是合適的?把多少錢花在女人身上最合適的?如果誰能發明這樣一個非線性函數f(x),來描述女人在不同階段對男人要求的變化情況,那么他一定能獲諾貝爾“女人學獎”。女人的感覺是最難量化、最難精確測量的,這或許是任何女人都不敢輕言幸福的原因。
女人大多愛看瓊瑤的言情劇,愿意為其中男女主人公煽情的臺詞和悲情的命運潸然落淚。很多人愿意相信,這就是世界的真相。然而,世上的道理大多并非如此。言情劇無非是編劇、導演為了迎合女人的情感需要而故意編出來的東東,它大多偏離真相,對提高女人的生存技巧、職業技能和世界觀不僅毫無益處,反而有害。可是女人不理會這一點,她們就是喜歡活在自己的夢中,活在別人為自己編造的夢中。
//我一定要成為一個造夢師
女人都希望男人愛她,希望男人為她付出。如果男人真的這么認為,為了心愛的女人放棄事業,成天守候在她身邊,那就大錯特錯了。女人希望男人愛自己,其中有一個重大前提,那就是男人比她強,有成功的事業和相當的物質保障。女人只希望獲得她尊崇的男人的愛。一個犧牲事業去滿足女人的愛的男人,遲早會被女人拋棄。千萬不要認為這是女人的圈套,事實上連她自己都不知道,她為什么前后變化會這樣大。從某種意義上說,女人是最“反復無常”的動物。“惟女人與小人難養”,說的就是這個道理。
//幸虧早點看到這條額
固執、粗暴、野蠻的男人雖然會在短時間內激怒女人,但從長期看,柔順、懦弱、文靜的男人更容易被女人拋棄。女人一直用兩種相互矛盾的價值體系來評估男人,一種是這個男人的雄性能力(包括他事業成功的可能和性能力),一種是他愛她、對她溫存的程度。當兩種價值觀發生沖突時,第一種價值觀會暫時占上風,但女人一旦冷靜下來,會立即把眼光投射到第二種價值觀上。這便是女人對男人愛恨交加、瞬間轉換的緣由。
//我應該是后一種男人了,希望她能冷靜,hoho~~
女人拋棄男人,通常不是因為他不夠愛她,而是因為他太愛她。一個太愛女人的男人,很難給女人一種被征服的感覺。男人之于女人,有點像明星之于“粉絲”。越是高高在上、特立獨行的明星,越能激發“粉絲”的狂熱崇拜之情。從某種意義上說,讓女人對男人保持適當的愛的饑渴,恰恰是維持愛情的最佳辦法。
//如果真這樣,一個字,賤!
呵呵,僅為一笑而已,男人們不要當真,女人們不要生氣,謝謝!
2007年7月4日
一些話總是能讓我們感知內心深處的震撼:
一切迄今我以為最接近于‘真實’的東西都來自感覺和對感覺的傳達。但是,我發現,這些東西常常欺騙我們。因此,唯一明智的是:再也不完全信賴那些哪怕僅僅欺騙過我們一次的東西。外部世界對我們的認知的幫助是這樣的不可信賴,那么,我們的主動感知活動和思維是怎樣的呢?這些活動也常常出現在夢境之中,使得我們無法確切地區分“夢”與“醒”。因此,我不得不懷疑,整個的世界是否僅僅是一個夢幻!
#Descartes
2007年6月28日
原來裝過一次linux,只是按照默認的方法裝完.現在看了一些資料.做了下面的概括,但仍然有很多不明白之處.

1.主分區 2G 2.交換分區 1--2倍于內存 256M 3.兩個分區在8G以內
linux至少需要兩個分區,linux native和linux swap兩種,前者用來存放系統文件,后者用來作為交換. linux安裝一個或多個linux native硬盤分區,但每個分區必須指定一個mount point.
swap分區一般為內存的兩倍,但最大也不要大于127M,若你內存大于128M,那么在安裝過程顯示boot要鍵
入boot:linux mem=xxxMB(xxx是你的內存大小),交換分區可以設置小于16個.
linux native是Ext2分區類型,用于存放系統文件.系統可以裝在多個分區也可以一個[載入點是'/'].
/boot 操作系統內核和啟動用的文件 50MB到100MB LILO只能讀取8GB以下的數據,所以linux要安裝在8GB的區域以內.
/usr 存放軟件的地方
/home 用戶所在地
/var/log 系統日志分區
/tmp 臨時文件,用于多用戶和服務器
/bin 存放標準系統實用程序
/opt 存放可選的軟件
/sbin 存放標準系統管理軟件
可以按需要設置以上分區,但必需至少兩個,一個swap分區和一個'/'分區
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 既然可以按需要設置以上的分區,那么主分區最多4個. 那么一個分區是swap,這個沒什么問題,剩下一個ext2的分區可以是'/'分區.
但我要分別給以上/boot等等設置分區,這個分區指的是什么呢,是在ext2的分區上繼續分幾個嗎? 我不是很明白.
還有這個擴展分區和主分區是什么關系呢?是分了幾個主分區,把其中一個作為擴展分區,還是擴展分區是和主分區對立的一個概念呢?
比如圖中在hda3上分有hd5---hd7,那么這里的hda3是一個主分區還是一個擴展分區?還是根本就是一回事!!
--------------------------------------------- 在硬盤都有個引導分區,里面有四項,所以硬盤只能有四個主分區,分別對應. 擴展分區也是一些連續的柱面 ---------------------------------------------
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
公告
失去的和得到的是相等的,
怎么做由你自己選擇。
常用鏈接
留言簿(5)
隨筆分類(34)
隨筆檔案(34)
相冊
Friends
My Blog
NBlog
OpenSource
Philosophy
ProblemSet
SITES
最新隨筆
搜索
積分與排名
最新隨筆
最新評論

閱讀排行榜
評論排行榜
|
|