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是一个主分区还是一个扩展分区?还是根本就是一回事!!
--------------------------------------------- 在硬盘都有个引导分区,里面有四项,所以硬盘只能有四个主分区,分别对应. 扩展分区也是一些连续的柱面 ---------------------------------------------
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
24 | 25 | 26 | 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)
随笔分类(34)
随笔档案(34)
相册
Friends
My Blog
NBlog
OpenSource
Philosophy
ProblemSet
SITES
最新随笔
搜索
积分与排名
最新随笔
最新评论
阅读排行榜
评论排行榜
|
|