tag:blogger.com,1999:blog-281935392009-03-01T08:46:27.197-08:00OwlMan的Blog生活、技术、哲学、信仰……owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.comBlogger39125tag:blogger.com,1999:blog-28193539.post-26867631135808456532008-05-07T23:52:00.001-07:002008-05-08T04:21:59.737-07:00给anti-cnn的一封公开信<h4>anti-cnn的创立者们,</h4> <h4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 你们好,首先向你们致以最高的敬意,感谢你们为我们的国家做的一切,感谢你们为中国人的话语权做的一切。也感谢你们在我最愤怒的时候给我发泄不满的地方。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我是一个软件开发工程师,前段时间刚参加完一个信息服务有关的项目,那时真是身心具累,自己显然没想到西藏的闹事居然和奥运火炬联系起来,更没有想到这巴黎这样的地方居然会出现攻击残疾人火炬手的事情,我承认那一刻我被激怒了,我发现了这个网站在被人攻击,于是也毫不犹豫的做了一些我好久没有做过的攻击西方网站的事情(我不能说具体的哪个网站,否则我可能有法律责任)。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后这样过了一个月,我的怒火慢慢平息下来,我发现我们的周围也不是一点错也没有,我开始劝一些人要有理性,有智慧的体现一个大国子民的民间外交,显然在这个风口浪尖上听得进这类劝告的人是很少的,所以引发了一些争论。我也被扣了无数的帽子,于是我开始考虑这个网站的处境。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显然,这个网站和我们大多数人一样,来自一时的怒火燃烧,于是奋起反击,但是不管多大的怒火,都有退去的一天,慢慢的这里会失去他原来的对西方媒体的反击功能的,因为事实上没有多少人天天看cnn和bbc的,更没有多少人能找出这些媒体真正的错误,这次西方的错误太明显了,也太愚蠢了,否则真不知道会如何呢,那么怎么办呢?<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先,我们显然不应该以妖魔化对妖魔化,东西方的民间矛盾(政府和媒体不算),很大程度来自误解,由于媒体的政治引导使得我们彼此不能掌握对方的真实想法,因此今后这个网站应该利用它已经建立的西方知名度多起一个桥梁的作用,而不是完完全全的反抗与反击,这是不符合这个时代主流的。<br>&nbsp;&nbsp;&nbsp;&nbsp; 再次,我们要多鼓励民众看这些媒体,并引导他们带着思考的看所有的媒体,包括cctv。这样我们才能真正的成熟起来,真正的理性爱国起来,比如政府做出与dl对话决定的半个月前,就有各种支持中国的政治评论家提出利用dl自己的言论,逼其就范的建议在香港和新加坡的政论节目中出现了,但是国内还有这么多人对此不理解,这是因为我们的消息闭塞造成的。<br>&nbsp;&nbsp;&nbsp;&nbsp; 最后,显然,在中国,政府对政论网站的心理是很复杂的,真心希望你们能把握好尺度将网站长久发展下去!</h4> <p>&nbsp;</p> <p>(此文在anti-cnn网站也有发表,本人在此稍有修改。)</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-2686763113580845653?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-32489159776279746102008-04-25T00:50:00.001-07:002008-04-25T00:50:56.879-07:00给rookieac的回复<p>你好,非常抱歉,最近比较忙,没有时间看留言板所以也没能及时给你回复,请你见谅,你的问题我看了,首先你的问题相当普遍,也因为如此答案反而很难具体而有效。我这里也只能给你一点提示,而不是具体能实行的学习计划。 <p>第一,对于编程来说,最主要的是这么一个公式:编程语言(programming language)+ 算法(algorithm)+ 设计(design)+ 库(library)+ 项目经验,所以你看书的时候应该明白自己在补充哪一方面的知识,举例说,c++ primer 是编程语言的基础教程,算法导论是算法和库的实现。effective系列和exceptional系列则重点在于语言层面的设计(就是说比较局限于cpp这个语言的设计手段),设计模式则是跨语言的一个设计思想导论,显然我说的这些是每个优秀的c++程序员都应该有所涉及的。 <p>第二,库和项目经验这些东西都是需要大量的实践的,比如mfc,就是一个微软的COM库,用于windows系统的一个比较成熟的商业库,虽然他有很多缺点,写起来让人很不舒服,但是对于cpp来说,在windows平台上还没有什么库能超越他,尽管现在的dotnet框架在慢慢取代,但是还需要几年时间,你看到net库的版本差异如此之大就知道他还没有达到可以稳定商业化的地步,所以过时与否实在是一种时髦的争论,对计算机具体的工作没有什么太大的意义,当你面对一个具体的项目的时候,可以选择的实在不多。 <p>第三,cpp是一个复杂的语言,他几乎涵盖了计算机编程的各个领域,学会了他,会给你学习其他编程语言打下一个非常雄厚的基础,但是我建议你不要局限于cpp这个语言,因为cpp是可以解决几乎所有领域的问题,但是具体到某个领域,你总会找到更方便的语言工具,比如c#,java,python之类的,cpp应该是最后的武器,而不是随身带的匕首。 <p>最后,尽量避免陷入时髦的争论,什么语言之争,库之争等等。什么工具都有它的强项领域,这种争论和当前抵制家乐福的争论一样无聊, <p>好了,这些就是我的个人意见,供你参考。</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-3248915977627974610?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com2tag:blogger.com,1999:blog-28193539.post-73564329065217402872008-04-22T03:43:00.001-07:002008-04-22T03:43:25.282-07:00一封回信<p>首先,我拜读了你的大作了,但是我觉得有必要提醒你一些东西,虽然我认同你的一些观点,比如新闻管制之类的。因为你的观点具有一定的代表性,但是你显然没有注意到中国的特殊性,<br>第一,中国恐怕是世界上无神论者最多的国家了,无论儒家还是道家,追其根本都是不信神的(某些神论是后世加入的),因此中国最容易形成的是人崇拜,这不是中共造成的。而是我们的文化基因如此,人崇拜结果是使得人们最在意的是今生的结果,如此一来,急功近利很难避免,一旦看到表面存在优势的东西就会要求快速实行,最近一百年的一系列失败说明了这些东西(洋务运动,维新变法,三民主义,共产主义等等),还包括你看到的一些留学生的言论,比如王千源这些,都是从一个极端走向另一个极端的最好证明,没有一样东西是经过真正深思熟虑的,自我消化的,这正是我们这些同时有能力看到东西方文化的人的困惑根源所在。 <p>第二,中国最大的问题不是腐败,也不是人权,而是一个很简单但是难以解决的问题:人口,这个因素决定了在中国,任何一个问题都会变得异常复杂,这样你也许就会理解中共为什么如此重视集体主义教育了,也就是你说的单一口径,拿最近的雪灾来说,如果中国人的思维像西方那样政府服务至上的理念的话,后果会不堪设想,因此这到底是一种悲哀还是一种万幸是很难下结论的,应该多思考,要知道这中国,哪怕有万分之一的激进派,都能组成成千上万的反对规模,而这些东西无助于解决腐败和集权的,思想解放或者解禁的事情,只能慢慢来,需要几代人的代价。 <p>第三,妖魔化中国的问题,其实政治事件永远都不能拿价值观,道德,还有什么感情作为理由的,中国现在已经对国际的力量平衡形成了挑战,很像一次世界大战之前的国际情况,结果经过两次世界大战,加上冷战才让利益达到一定的平衡,所以就很好理解为什么中国受到了严重的猜疑,也许你会问。为什么不是印度,或者日本,你到过印度的话就该知道印度真正构成威胁还为时尚早,按照印度现在的经济结构,很难承受比巴基斯坦稍微强大一点点的国家的对抗的,日本基本上依赖着美国,对于西方来说完全是可控的,所以,对于西方来说最大的威胁来自中国和俄罗斯,另外,如果中东统一的话也是一个威胁。这样我们就很容易理解世界上的各种表象了 <p>只是一些想法,供你参考</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-7356432906521740287?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com1tag:blogger.com,1999:blog-28193539.post-25296449588502179422008-04-21T05:30:00.001-07:002008-04-21T05:38:21.042-07:00愤怒过后的思考<p>从未自己来看,我本来不太关注这个事情,因为我的工作很忙,显然我得承认金晶的遭遇激怒了我,我很愤怒,我攻击了一些西方的网站(当然,我不会承认任何一个网站的瘫痪是我攻击的,哈哈哈),但是,怒火终归要过去的,你我都如此,如果我们在日本没有遇到新的攻击的话,这个事情应该可以告一段落了,我们还是要回归我们自己的生活,做好我们的社会角色。经过这次风波之后,我们应该得到一些东西,下面是我这些天想到的东西,写下来,供大家参考,也算我自己对这段愤青岁月的交代吧 。</p> <p> 第一,这是一次中西文化的交锋,我们可以看到在对待媒体,对待事件方面我们和西方有多么的不同,我们强调我们的优势,西方强调西方的优势,于是政治,文化 、体育,经济开始了无一例外的交锋,脱开输赢不说,这种交锋就是中国复兴的必经之路,这种交锋可能会贯穿我们这代人的一生。不管你是80后。90后还是70后。</p> <p> 第二,这是我们自身对言论态度的一次很好的训练,无论你抵制不抵制,无论你理智不理智,无论你是汉奸言论还是爱国言论,至少我们都表达了看法,但是显然我们还是没有习惯身边有不同的声音,我们总是再说”为什么这么多人不理智?“”为什么中国那么多汉奸?“但是不要忘记中国光是网民就有几亿,哪怕有百分之一的比例也会是成千上万的规模,这本来就是不值得大惊小怪的,是人就会有差异,有人智慧,有人勇敢。这都正常。我们可以君子和而不同。这样我们会讨论出更多真正有用的东西。</p> <p> 第三,对待媒体的看法也是一次好反思,其实就在半年前还有很多人拿cnn批评cctv,因为他们看到了cnn攻击美国政府。现在却是走到了另一个极端,凡是 cnn的东西他们都不信,这都不是健康的态度,如果我们不能对我们看到的信息加以分析和辩论,我们始终要被骗的,想想看,如果cnn在图片处理上稍微小心一点,你是不是就相信中国政府真的对民众隐瞒了真相呢?就像以前某些事件一样,这是我们要反思的,这点我们要感谢cnn犯了如此愚蠢的错误。</p> <p> 好了,我的看法就是这些,希望好好交流,无论你对我的言论怎么看,不文明的字眼还是少一点,每次看到都都觉得丢脸,</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-2529644958850217942?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-71588809755366107872008-02-12T01:23:00.001-08:002008-02-12T02:07:05.280-08:00测试语法高亮功能<p></p> <p></p> <p></p> <p>功能提供者:<a title="http://code.google.com/p/syntaxhighlighter/" href="http://code.google.com/p/syntaxhighlighter/">http://code.google.com/p/syntaxhighlighter/</a></p> <h2>Ruby代码</h2><pre class="ruby" style="width: 50%" name="rubycode"><br />require "test/unit"<br />require "src/test_contianer"<br />require "src/test_language"<br />class MyTest &lt; Test::Unit::TestCase<br /> def test_contianer<br /> coll = TestContianer.new(10)<br /> s0 = "abc"<br /> coll.append(s0)<br /> assert_equal(s0,coll[0])<br /> s1 = "abcd"<br /> coll[1] = s1<br /> assert_equal(s1,coll[1])<br /> coll.delend()<br /> assert_nil(coll[1])<br /> assert_equal(s0,coll.find(s0))<br /> end<br /> def test_language<br /> tobj = TestLanguage.create(){|t| t.class}<br /> assert_nil(tobj) <br /> end<br />end<br /></pre><br /><h2>Cpp代码</h2><pre class="cpp" name="cppcode"><br />#include <iostream><br />#include <map><br />using namespace std;<br /><br />map<string ,INT> gctable;//编译器插入代码<br />class A<br />{};<br />gctable["A"] = 0;//编译器插入代码<br />A* obp;//编译器插入代码<br />void rungc()//编译器插入代码<br />{<br /> map<string ,INT>::iterator it = gctable.begin();<br /> for(;it != gctable.end();++it)<br /> if(gctable["A"] == 0)<br /> delete obp;<br />}<br />int main()<br />{<br /> A *p0 = new A;<br /> gctable["A"]++;obp = p;//编译器插入代码<br /> {<br /> A *p1 = p0;<br /> gctable["A"]++;//编译器插入代码<br /> //....<br /> gctable["A"]--;//编译器插入代码<br /> }<br /> rungc();//编译器插入代码<br /> gctable["A"]--;//编译器插入代码<br /> rungc();//编译器插入代码<br /> return 0;<br />}<br /><br /><br /><br /></pre> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-7158880975536610787?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-50609097403195946462008-01-29T02:47:00.001-08:002008-01-29T02:47:24.101-08:00aptana和eclipse共享插件<p>最近因为要做Ruby项目,需要radrails插件,于是下载了aptana,使用过程中发现,其实aptan就是用eclipse内核开发的,所以应该可以使用eclipse所有的插件.于是动手一试,果真如此,下面总结操作过程,以便于朋友们参考,本次要共享的插件为语言包NLpack, </p> <p>第一,将NLpack.zip解压于某一目录,比如win系统下为d:/NLpack<br>第二,分别在aptana和eclipse的安装目录下的links目录(如果不存在可以自行建立)下面建立文件nlpack.link<br>第三,编辑该文件,输入path = d:/NLpack,保存文件后退出,</p> <p>然后我们就会看到同时汉化了,两个IDE.下面是aptana效果图:</p> <p>&nbsp;</p><a href="http://lh5.google.com/JieLing.owlman/R58ENQWU3FI/AAAAAAAAABU/nQKbDK__n_k/image%5B4%5D?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="309" alt="image" src="http://lh4.google.com/JieLing.owlman/R58EOAWU3GI/AAAAAAAAABg/0rKmVhRDhP0/image_thumb%5B2%5D?imgmax=800" width="384" border="0"></a> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-5060909740319594646?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-46444509070974857242007-10-16T23:05:00.001-07:002007-10-16T23:05:58.187-07:00在饮水思源“IT职场"板的一篇约稿-关于职业规划<br /><p><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">实话说,这篇文字不好写,因为我可以说自己是个成功的本科毕业生,但远远谈不上是个成功的职业人,至少在目前是如此,所以我很难说我说的这些对各位的职业规划有什么实际的作用,既然我答应了斑竹的稿件,自当尽力为之,至于水份如何,相信各位的</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">CPU</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">自会取舍。</span></p><br /><p><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">首先,我不同意所谓的把兴趣当职业是个不成熟的表现,尤其是在你的职业规划阶段,不能过于现实,这不是个好主意,以后的环境有得是机会让你不得不回归现实,但现在不行,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">避免不必要的弯路和失败永远是个可爱的梦想,只有这些东西才能造就真正对你正确的东西,如果你把他避免了,你的成功也许就失去了前导逻辑,正如乔丹说的:"我之所以成为我,是因为我投丢了</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">9000</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">个该进的球。",因此我的第一个建议是,要做程序员,首先要爱编程,并且爱的是编程的过程,也就是说,你的乐趣来自你做的事,而不是别人的评论,因此你会毫无怨言的为他付出你的耐心和时间,这些做到不容易,但是这才是你将来要面对现实的基石,才能退可守,进可攻。</span></p><br /><p><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">其次。要保持知识结构的平衡,大学里通常存在三种现象,第一,热衷于各种各样的题,对他们来说</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">ACM</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">手到可解,各种考试不在话下,面试的时候,各种证书可以塞满书包,但是对面试官的问题大部分难以回复;第二,热衷于语言,能说出语言的各种不为人知的特性,对标准了如指掌,但是发现实际编程起来到处水土不服,因为业界的代码远远没那么干净,那么理想化;第三。热衷于打工,而且极像钟点工,别人给你放好了工具和设计,你会用工具就好了,这个他可能做的起来,但是很难交流。术语乱用,理论系统松得比沙子还厉害。很难合作,他也很难再进一步。所以要平衡。要算法,要理论,要语言,要实践,可这样一来你也许没得约会了。呵呵。</span></p><br /><p><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">最后,建议要兴趣广泛,不要急功近利。没用的不看,有钱的就上。计算机是个寄生行业,你很难判断他的范围,因此你也很难判断,什么是有用的,什么是有钱的。我看</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">nba</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">,看股票,看黑格尔的逻辑学,看马克思的书,也看武侠小说,但是我还是没想到电视机的机顶盒也能上</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">web</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">,用遥控器操作。你少了一点知识,就可能失去了一项工作,生活永远难以预料。</span></p><br /><br/><p class="zoundry_bw_tags"><br /> <!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br /> <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/%E8%81%8C%E4%B8%9A%E8%A7%84%E5%88%92" class="ztag" rel="tag">职业规划</a></span> <br /></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-4644450907097485724?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-20723051123003058962007-08-21T02:04:00.000-07:002007-08-21T02:08:13.875-07:00再谈买书计算机的书,大体分两种,一种是技巧性的书籍,一种是素质性的书籍在这两类书里选择还是有一定的区别的。<br />从作者来看 ,中国台湾的一些作家,和大陆的一些年轻作家在技巧性方面还是有一定的水平的,我指的是写作水平,比如eclipse方面的一些国内书籍还是相当有作用的,当然这些人大部分处于blog阶段,离开占据主流图书市场还需要时间,但我们至少看到了希望。至于素质性的书籍,由于中文描述技术相对于英文有天然的不足,二义性很多,逻辑描述方面很难保持一定的连贯性。再加上目前我们都有或多或少的浮躁情绪,使得国外图书占据了垄断地位,这恐怕还要耗掉一代人,所以我的看法是,技巧性的东西,你除了买书之外,还可以关注blog(比如博客堂,javaeye等),并且也可以关注他们出的一些书籍。素质性的书(比如设计模式,代码大全,effective系列),那确实该买来反复读,而且尽可能买老外的书。<br />从内容看,技巧性的书大部分是速查性的,而素质性的书大部分属于要忘记文字化入血液的,我从来不认为记忆力是个问题(除非你连什么东西该在哪儿也记不住),因此前者,利用计算机的查找本事,比你翻箱倒柜的找书要高效得多。后者,你应该远离电脑的时候,静下来好好的思考着读,这个时候纸张的作用才是不可替代的。<br /><br />所以,不要担心什么互联网依赖,事实上这种依赖是进步的,我们的大脑就这么多东西,把适当的记忆外接没什么不好,人脑应该干电脑干不了的事儿,买书还是养心优先吧。我们面临的浮躁情绪远比互联网依赖要可怕得多。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-2072305112300305896?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com1tag:blogger.com,1999:blog-28193539.post-73891956328620899092007-08-17T02:21:00.001-07:002007-08-17T02:21:13.270-07:00也谈读书<br /><p><span lang="EN-US" xml:lang="EN-US"><a href="http://bbs.sjtu.edu.cn/bbstcon?board=C&amp;reid=11872707691"><span style="FONT-FAMILY: Calibri">Gaobo</span><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin" xml:lang="EN-US"><span lang="EN-US" xml:lang="EN-US">写的那东西</span></span></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">上了水源的十大(在我参与之前就上了),这家伙的娱乐阴谋总能得手。我太生气了。因此我也总结几条读书"指导",分散注意力。</span></p><br /><p><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-bidi-theme-font: minor-fareast" xml:lang="EN-US"><span style="mso-list: Ignore"><span style="FONT-FAMILY: Calibri">第一.</span> </span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">读经而已,不足以知经:</span><span lang="EN-US" xml:lang="EN-US"><br/></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">这年头都是号称自己读了某某大家之作,有些人还读了</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">3th</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">去买</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">4th</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">,言必子曰某某,以得其乐,其实光读一本,光读一家,你理解出来的大部分不是对的东西,你读了</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">effective</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">系列。会觉得</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">lippman</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的东西细节错误一堆一堆的,但无伤大雅,于是你走向了细节微调好宏观设计的修炼,在到做了项目之后你又会无限感叹</span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">effective</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">系列给你描述了一个贵族社会,而你自己只是成千上万垃圾代码的奴隶。你又不得不会回头去看看那些垃圾代码的处理惯例,无限的悲哀就此来了,因此读书都是一个记忆、理解。悟道,反省。再悟道的循环过程,好书经典无非是其中一个环节而已。</span></p><br /><p><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-bidi-theme-font: minor-fareast" xml:lang="EN-US"><span style="mso-list: Ignore"><span style="FONT-FAMILY: Calibri">第二.</span> </span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">不可以书博我,以至于释卷而茫然:</span><span lang="EN-US" xml:lang="EN-US"><br/></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">在计算机行业,每天要学的东西很多,很多时候等不到好书到手你就得上手,文档。网页、论坛。烂书虽说鱼龙混杂,要能分辨精华之物,才能说得上能读能用。以我博书,处处得益。</span></p><br /><p style="TEXT-ALIGN: left"><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-bidi-theme-font: minor-fareast" xml:lang="EN-US"><span style="mso-list: Ignore"><span style="FONT-FAMILY: Calibri">第三.</span> </span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">读书更多在谋心,而不是创造乌托邦</span><span lang="EN-US" xml:lang="EN-US"><br/></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">虽然你在经典上学的东西很多没有用武之地(这点不止计算机,佛经,圣经、论语也如此),但不等于他们没有读的价值,你仍然可以提高自己的专业素养。提高自己工作模块的效率。更可能有朝一日你在其位而某其政,总比你去看什么超级女声,玩什么魔兽要好得多。</span></p><br /><br/><p class="zoundry_bw_tags"><br /> <!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br /> <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/%E8%AF%BB%E4%B9%A6%20%E5%AD%A6%E4%B9%A0" class="ztag" rel="tag">读书 学习</a></span> <br /></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-7389195632862089909?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-60602821588917794972007-06-23T02:19:00.001-07:002007-06-23T02:35:30.585-07:00cpp的缺点及学习他的必要性<p>最近以来总有人跟我说Cpp没什么用,效率不及C,移植不如java,方便不如C#等等,其实呢,语言,工具也,无论用什么,不用什么,都是各取所需,盲人摸象而已,但是从技术上还是有些道理可说的。下面我简单的表述下我的观点(我这个盲人摸到的象):<br />实际上对于大多数人来说,Cpp败就败在两点,<br />一,太复杂,多范型,多模式。多层次,导致学习周期实在太长,最合适本科时间慢慢学,<br />二,库杂。基本上一个问题对应一个库一个编译器。 开源的,不开源的,好的但不实用的,实用的但设计很差的,应接不暇,接口混乱。<br />所以人们就学不快也用不快了。<br />事实上,除非工作环境定了,否则你还是得不停的学语言,java,c,ruby、 js、vbs,实话说压力少不了多少。<br />因 此有时间有兴趣的话,学学Cpp还是绝对有好处的。至少Cpp是多范型语言,他能为你学习别的语言打下坚实的基础,我学习别的语言和框架从来没超过一个 月,另外Cpp的范围几乎盖过了计算机的各个层次,几乎用cpp可以解决任何问题。当然用别的工具再做,至少逻辑实现考虑是不成问题了。<br />我个人认为Cpp更偏向程序员的内在修为,如果您真的爱这行,想把这行做好,内外兼修是非常必要的事儿。</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-6060282158891779497?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-19176258556321436272007-06-17T06:13:00.001-07:002007-06-18T01:08:11.094-07:00复习下java applet……<br /><p>今天复习了下java,别说java写UI的功能就是强,完成下面这个界面代码不到50行:</p><br /><p><br/><br/><a href="http://www.lingjie.net/blog/uploaded_images/118215316766_ui.JPG" rel="lightbox" title="ui.JPG"><img src="http://www.lingjie.net/blog/uploaded_images/118215316766_ui_tn.jpg" title="ui.JPG" height="200" width="200" alt="ui.JPG" border="0" id="urn:zoundry:jid:118215316766_ui.JPG"/></a></p><br /><p style="TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">package</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">MyApplet;</span></p><br /><p style="TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">import</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">javax.swing.*;<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">import</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">java.awt.*;<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">import</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">java.awt.event.*;</span></p><br /><p style="TEXT-ALIGN: left"> </p><br /><p style="TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">public</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">class</span> GridLayoutDemo <span style="COLOR: blue">extends</span> JApplet</span></p><br /><p style="TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">{<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">private</span> <span style="COLOR: blue">static</span> <span style="COLOR: blue">final</span> <span style="COLOR: blue">long</span> serialVersionUID = 1L;<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">private</span> JTextField t = <span style="COLOR: blue">null</span>;<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">private</span> <span style="COLOR: teal">Container</span> cp = <span style="COLOR: blue">null</span>;<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">private</span> JButton bt = <span style="COLOR: blue">null</span>;</span></p><br /><p style="TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">@Override<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">public</span> <span style="COLOR: blue">void</span> init()<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">{<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">cp = getContentPane();<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: teal">Container</span> cp1 = <span style="COLOR: blue">new</span> <span style="COLOR: teal">Container</span>();<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">cp1.setLayout(<span style="COLOR: blue">new</span> <span style="COLOR: teal">GridLayout</span>(4,3));<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">t = <span style="COLOR: blue">new</span> JTextField(12);<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">t.setHorizontalAlignment(JTextField.RIGHT);<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">cp.add(<span style="COLOR: teal">BorderLayout</span>.NORTH, t);</span></p><br /><p style="TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">for</span>(<span style="COLOR: blue">int</span> i = 1; i &lt; 10; ++i)<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">{<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">bt = <span style="COLOR: blue">new</span> JButton(<span style="COLOR: maroon">""</span>+i);<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">bt.addActionListener(<span style="COLOR: blue">new</span> Bul());<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">cp1.add(bt);<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">}<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">bt = <span style="COLOR: blue">new</span> JButton(<span style="COLOR: maroon">"*"</span>);<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">bt.addActionListener(<span style="COLOR: blue">new</span> Bul());<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">cp1.add(bt);<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">bt = <span style="COLOR: blue">new</span> JButton(<span style="COLOR: maroon">"0"</span>);<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">bt.addActionListener(<span style="COLOR: blue">new</span> Bul());<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">cp1.add(bt); <span style="mso-tab-count: 1"><br/></span></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">bt = <span style="COLOR: blue">new</span> JButton(<span style="COLOR: maroon">"."</span>);<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">bt.addActionListener(<span style="COLOR: blue">new</span> Bul());<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">cp1.add(bt);<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">cp.add(<span style="COLOR: teal">BorderLayout</span>.CENTER,cp1); <span style="mso-tab-count: 2"><br/></span></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">super</span>.init();<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">}</span></p><br /><p style="TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">private</span> <span style="COLOR: blue">class</span> Bul <span style="COLOR: blue">implements</span> <span style="COLOR: teal">ActionListener<br/></span></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">{<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US"><span style="COLOR: blue">public</span> <span style="COLOR: blue">void</span> actionPerformed(<span style="COLOR: teal">ActionEvent</span> e)<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">{<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">t.setText(((JButton)e.getSource()).getText()); <span style="mso-tab-count: 3"><br/></span></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">}<br/></span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes" xml:lang="EN-US">}<br/></span><span lang="EN-US" xml:lang="EN-US"><span style="FONT-FAMILY: Calibri">}</span></span></p><br /><br/><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-1917625855632143627?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-34577672465906342452007-05-06T23:16:00.001-07:002007-05-06T23:16:38.723-07:00做球迷是件愚蠢的事情<br /><p>最近半年做了一阵火箭球迷,事实证明这是个错误的方向,哪怕只是娱乐的方向,不不不,相信我,这和姚密姚黑那些垃圾事没任何关系,哪怕我选的不是火箭队,选的是NBA里的任何一支球队都一样,是个愚蠢的错误,因为球队都会起伏.所谓的球迷也根据这个起伏情绪波荡不定,本人却做不了任何事.把自己的喜乐完全的交给那支连自己都说不清楚为什么喜欢的球队.除非你遇上总冠军了,否则早晚会有失望的那天的....这种状态和懦夫没啥区别,是的,自己的快乐,自己的希望,,要自己来主宰 那样,无论成功还是失败,至少我们不会说,TMD.我什么也没干,为什么失望的总会是我???</p><br /><p>好了,火箭回家钓鱼去了.我也该结束这个愚蠢的该死的懦夫的娱乐了......但愿有人看得懂我在说什么.上帝保佑我...哈哈...........</p><br /><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-3457767246590634245?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1170338407910560042007-02-01T06:00:00.000-08:002007-02-02T00:50:57.210-08:00Qt学习手记之二(入门篇)<br /><p>按照习惯,学习一个库,一般从写一个Hello World程序开始,在上篇中我们已经在库的安装目录里看到了这样的例子,但是那个例子只有一个button,过于简单了,甚至不能算是一个完整的窗体程序,为了比较深切的体会Qt编程的方式和思想,我们有必要自己写一个相对比较复杂的Hello程序,我们的程序里应该有一个面板里面放置两个控件(一个无事件控件,和一个有事件控件)来组成我们的程序,对于一个事件驱动的程序来说,这样体验才算是比较完整的,ok,首先,我们可以在上一个程序的基础上进行扩展,qt的类名字都很直观,使得我们不需要借助手册,就可以猜到一些控件的类名(真的不知道可以打开Assistant查询), 于是一个程序转眼便敲入了,</p><br /><h3>编码:</h3><br /><p>代码如下:<br/>#include &lt;QApplication.h&gt;<br/>#include &lt;QLabel.h&gt;<br/>#include &lt;QWidget&gt;<br/>#include &lt;QFont&gt;<br/>#include &lt;QPushButton.h&gt;<br/>int main(int argc,char* argv[])<br/>{<br/>QApplication app(argc,argv);<br/>QWidget winform; //作为一个主窗体<br/>QLabel label("&lt;h1 style='color:blue'&gt;Hello, QT&lt;/h1&gt;",<br/>&amp;winform); // Label 显示hello信息<br/>QPushButton button("OK", &amp;winform); // 退出窗体按钮<br/>winform.resize(200,150); //设置大小<br/>label.resize(200,100);<br/>button.setGeometry(10, 100, 150, 40);<br/>button.setFont(QFont("宋体",10, QFont::Bold)); //设置字体<br/>label.setAlignment(Qt::AlignCenter);<br/>// 设置事件关联<br/>QObject::connect(&amp;button, SIGNAL(clicked()), &amp;app, SLOT(quit()));<br/>winform.show();<br/>return app.exec();<br/>}<br/>这里大概只有几点需要说明:<br/>1。这里的头文件和所用的类几乎是一一对应的,因此很容易理解。<br/>2。任何一个Qt程序都得从一个叫QApplication的类对象开始,他引入来自入口函数main的参数,返回成员函数exec()的运行结果。<br/>3。可以用于面板的控件有很多,就我们这样的需求,一个QWidget足够了。<br/>4。QObject::connect(&amp;button, SIGNAL(clicked()), &amp;app, SLOT(quit()));这句代码确定了button控件需要响应的单击(click)事件和事件的处理函数(quit())的关联。</p><br /><h3>编译:</h3><br /><p>OK,编码完成,保存为一个cpp文件(比如Qhello.cpp)到一个临时目录下(比如E:\tmp\),然后打开我们的命令行环境,进入这个临时目录,首先,要建立一个Qt工程文件,输入命令qmake -project 回车后我们得到一个名叫qt.pro的工程文件,接着我们要建立makefile文件(这个文件会设定好每一个编译选项,以方便我们后来的编译),继续输入命令qmake,这样我们就在该目录下看到了三个makefile文件:<br/>Makefile.Debug:编译Debug版(即带Debug信息的版本,一般用于测试和调试)的编译选项。<br/>Makefile.Release:编译Release版(即不带Debug信息的版本,一般用于产品的发布)的编译选项。<br/>Makefile :上面两个文件的总聚合器,他用于直接响应make命令。<br/>最后在命令行里输入make命令,编译该工程,该工程默认生成的是Debug版程序,你可以在debug子目录下找到,如果需要更改源码,改完后,重新make就可以了,如果没有加入新文件,无需更改makefile和工程文件。如果确定可以发布,可以输入make release命令来生成Release版本(在Release子目录下)。</p><br /><h3>运行结果:</h3><br /><a href="http://www.lingjie.net/blog/uploaded_images/qt.jpg" rel="lightbox" title="qt.jpg"><img src="http://www.lingjie.net/blog/uploaded_images/qt_tn.jpg" title="qt.jpg" height="176" width="200" alt="qt.jpg" border="0" id="urn:zoundry:jid:qt.jpg"/></a><br/><br/><p class="zoundry_bw_tags"><br /> <!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br /> <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/c%2B%2B%EF%BC%8Cgui%EF%BC%8CQt" class="ztag" rel="tag">c++,gui,Qt</a></span> <br /></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-117033840791056004?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com1tag:blogger.com,1999:blog-28193539.post-1168693041580502942007-01-13T04:57:00.000-08:002007-01-13T05:36:01.830-08:00Qt学习手记之一(安装篇)<h3>前奏:</h3><br /><p>提到C++的GUI Framework估计大多数人都会想到<a href="http://en.wikipedia.org/wiki/Microsoft_Foundation_Classes" target="_blank">MFC</a>、<a href="http://wep.cc.topzj.com/redirect.php?tid=364318&goto=lastpost" target="_blank">VCL</a>,因为在十年前的COM时代,这两个大家伙几乎垄断了整个C++ windows平台上应用程序的开发市场, 但是最近几年,随着<a href="http://msdn.microsoft.com/netframework/" target="_blank">.NET framework</a>的推出。使得MFC这样原本就非常丑陋,麻烦的framework开始风光不再了,我也学过几天的MFC,那种宏作为消息满天飞的编程风格让我很快就放弃了,几次和朋友的交流中,我们都认为C++其实不太适合做GUI程序,但是我必须面对一个问题:当我需要用C++写个GUI程序的时候,我该用什么?我一直非常犹豫,很显然,我不太愿意用MFC,我也不太愿意为了VCL再去学一个IDE的用法,而且我不得不用C++写GUI的时候往往是在非windows平台上,显然上面两个framework就更不符合这个要求了。经过了一番调查,我最终选择了<a href="http://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/overview/index.html" target="_blank">Qt</a>这个库,于是也打算在这个blog上开一个学习手记系列。</p><br /><h3>下载:</h3><br /><p>好了,现在先让我们搭建工作环境,讲述Linux上的Qt环境设置的文章网上很多,我这里不想再累述了,有兴趣的人可以google之。我下面谈在windows下的安装和设置:首先,我们都知道,Qt这样的开源产品和GCC编译器的密切关系,所以首先我们必须有<a href="http://www.mingw.org/" target="_blank">MinGW</a>环境,那么第一步,就必须先安装MinGW,我这里推荐一个IDE,dev-cpp,他是基于MinGW的一款C++ IDE,自带了MinGW,集成了gcc、g++、gdb等工具,非常有用。下载地址如下:<br /><a href="http://www.bloodshed.net/devcpp.htm">http://www.bloodshed.net/devcpp.htm</a></p><br /><p>接着,我们需要下载Qt了,熟悉开源产品的朋友都知道,这种产品通常有两种安装方式:第一,源码安装,这个下载后,在命令行(shell)进行本地编译即可,这个在Linux下安装软件是非常常见的;第二,是二进制安装,通常有自带的GUI界面的图形安装想到,在windows下通常是这种安装方式,其实那种安装方式和操作系统没什么必然的联系,只是一种习惯而已,既然我们是在windows下,那么就入乡还俗,用第二种方式,我们需要下载Qt的Runtime for MinGW包,地址如下:<br /><a href="http://www.trolltech.com/">http://www.trolltech.com/</a></p><br /><h3>安装:</h3><br /><p>下载之后,你会得到一个qt-win-opensource-4.2.2-mingw.exe文件,双击后启动安装程序,和通常安装windows程序一样基本上只要一路next即可,只有一个地方要特别注意,就是他会问你MinGW的路径,你如果安装的就是MinGW,那么就写<span style="color:#0000ff;">X:\MinGW</span>(X是你安装MinGW所在的目录),如果你安装的是dev-c++就写你安装他所在的目录,如下图所示:<br /><a title="20051025_2.gif" href="http://www.lingjie.net/blog/uploaded_images/20051025_2.gif" rel="lightbox"><img id="urn:zoundry:jid:20051025_2.gif" title="20051025_2.gif" style="WIDTH: 396px; HEIGHT: 300px" height="300" alt="20051025_2.gif" src="http://www.lingjie.net/blog/uploaded_images/20051025_2_tn.jpg" width="396" border="0" /></a><br />当然你也可以选择这个时候在线安装MinGW,可是这样就取决于网络状况了(这里是直接连接国外的服务器的,一般会很慢,经常断线),这里不鼓励使用。最后,等向导完成后,你会发现你的开始菜单里多出一项<span style="color:#0000ff;">Qt by Trolltech v4.2.2 (OpenSource)</span>菜单项,到这里还没最终完事,因为Qt没还没建立debug库,会导致在安装目录之外你不能运行Qt程序,因此展开该菜单项,选择<span style="color:#0000ff;">Qt 4.2.2 (Build Debug Libraries)</span>,就会自动编译debug库,编译时间很长,需要耐心等待,不熟悉源码安装的方式朋友们也可以体验下源码安装的感觉(一条条命令往上飞,彷佛穿越了时空,-_-b)……</p><br /><h3>设置:</h3><br /><p>虽然,qt自带了命令行环境(Qt 4.2.2 Command Prompt),但是我们可能还是希望把环境变量全局化,因此我们可以右击"<span style="color:#0000ff;">我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量的path</span>"值后面加上下面三个路径:<br /><span style="color:#0000ff;">X:\Dev-Cpp\bin<br />X:\Dev-Cpp\mingw32\bin<br />X:\Qt\4.2.2\bin</span><br />目录之间用";"分割,至此环境搭建完成。</p><br /><h3>检验安装:</h3><br /><p>Qt自带了很多DOME。我们可以在X:\Qt\4.2.2\examples\下找到,例如我们可以用命令行环境进入到X:\Qt\4.2.2\examples\tutorial\t1目录下,然后运行qmake命令编译该程序DOME,如果安装没问题,会在该目录下的relese目录下找到Qt版的Hello World程序,如下图所示:</p><br /><p><br /><a title="hw.JPG" href="http://www.lingjie.net/blog/uploaded_images/116869293282_hw.JPG" rel="lightbox"><img id="urn:zoundry:jid:116869293282_hw.JPG" title="hw.JPG" height="94" alt="hw.JPG" src="http://www.lingjie.net/blog/uploaded_images/116869293282_hw_tn.jpg" width="194" border="0" /></a></p><br /><p class="zoundry_bw_tags"><br /><!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br /><span class="ztags"><span class="ztagspace">Technorati</span> : <a class="ztag" href="http://technorati.com/tag/c++" rel="tag">c++</a>, <a class="ztag" href="http://technorati.com/tag/qt" rel="tag">qt</a></span><br /></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116869304158050294?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1168426241855975262007-01-10T02:50:00.000-08:002007-01-10T03:14:08.226-08:00Zoundry Blog Writer的体验<br /><p>半年前,我试用<a href="http://office.microsoft.com/zh-cn/products/default.aspx" target="_blank">office2007</a>的时候,对word能直接作为<a href="http://www.blogger.com/start" target="_blank">Blogger</a>的客户端发布器感到非常高兴,这也是我违背使用软件习惯的而去追新的一个很重要的原因,但是用久了我就发现,因为是beta版本,他的很多功能很不稳定,不但不能上传图片,而且还经常不能连接blogger服务器,于是我就希望找到专门用来写blog的客户端软件,于是就发现了<a href="http://cn.zoundry.com/download.html" target="_blank">Zoundry Blog Writer</a>,用了一段时间,感觉相当不错。用过软件的人基本上拿来就能上手。在这里推荐一下:</p><br /><p style="TEXT-ALIGN: center"><a href="http://www.lingjie.net/blog/uploaded_images/blog.JPG" rel="lightbox" title="blog.JPG"><img src="http://www.lingjie.net/blog/uploaded_images/blog_tn.jpg" style="WIDTH: 356px; HEIGHT: 233px" title="blog.JPG" height="233" width="356" alt="blog.JPG" border="0" id="urn:zoundry:jid:blog.JPG"/></a></p><br /><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116842624185597526?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1168422529303340462007-01-10T01:46:00.000-08:002007-01-10T01:48:49.320-08:002007了? 也许吧。的确,我又很久没更新这个blog了,按理说,新年来到总得写点什么总结啊,愿望啊什么的,但是说真的,我实在没什么东西可以写的,2006年对我来说,就像一个长期不醒的恶梦,一年下来毫无进展,也毫无头绪,除了迷惘还是迷惘,毕业了,没什么成就感,工作,除了年初微软的那场面试之外,也毫无进展,尝试过很多方式,做啥啥不顺,技术,也算回归基础了,算法上总算有了一点点进步,总之,光语言啊,平台啊,干不了什么正经事,有一回,一个朋友跟我说:“像你这样的高手找工作太容易了吧?”,容易?呵呵,你讽刺我吧?像我这样只知道语言,类库的家伙多得要死,我还偏偏有个那儿都不能去的身体,还容易? 早着呢。不过早早晚晚还是会搞定的,只是这事急不得就是了。<br />07年的愿望? 算了,不说你们也清楚了。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116842252930334046?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1166272626087489882006-12-16T04:34:00.000-08:002006-12-16T04:37:06.100-08:00程序的效率对于一个程序员来说,程序的效率是一个不能忽视的问题,各种论坛上也充满了各种各样的关于效率的争论,这就不得不引起一种思考,一个程序的效率究竟取决于哪些因素呢?我们应该如何均衡效率问题和其他软件设计问题之间的利弊关系呢?这就是这篇文字想要讨论的问题。<br />首先,我们来看看,哪些因素左右了我们程序的效率,大致可以分为以下几个因素:<br />第一, 语言和平台:每一种语言都有自己赖以生存的平台环境,这关系到一个语言本身最根本的内部机制,比如java必须运行于JVM,.NET必须有CLR的支持,c\c++必须有支持该语言的编译器和各种库,这些属性就决定了他们对于CPU指令的操作距离,这样的距离越远,当然他们的编译出来的程序的运行效率就越低,拿x86系列来说吧,JVM是面向操作系统的。因此只要安装了对应的操作系统版本,java就能做到编译一次,任何地方都可以运行的目标,但是这里的运行自然是JVM面向操作系统的解释运行,如此一来速度自然快不了;CLR呢?他是面向windows系统的,他等于是“做入”了windows,在第二次JIT编译之后,他便可常驻系统,如此一来,他的速度在windows上自然会快一些,当然也因此失去了跨操作系统运行的能力(虽然理论上可行,但实际上非常不理想,有兴趣的人可以关注一下mono项目);c\c++则只要编译之后,基本上可以和CPU直接通话,效率自然是很高了,但是他们对硬件的依赖程度就大大增加,从而对程序员的要求也达到了新的高度。<br />第二, 数据结构和算法:语言通常只是一种表达工具,平台是你的工作环境,一般情况下,程序员并没有选择,那么自然他们只能在表达的内容上下一些功夫了,选择正确的数据结构,可以是程序的编写变得相当容易,而又不损失效率,ADT的思想可以使得我们摆脱数据具体存储的细节问题,我们可以知道二叉树、哈希表利于搜索,链表利于存储,向量利于随机等等,使得我们可以有效的组织内存空间来达到换取CPU效率的目的;算法的设计可以尽可能的减少CPU指令的数量,从而使问题的复杂度呈几个数量级的降低,比如数组的最大子序列问题,一般的设计,这样的问题会做成平方(O( N^3))甚至立方(O( N^2))的复杂度,然后通过动态规划和分治法等的重新设计,该问题可以在线性(O(N))复杂度里解决。好的算法可以使得处理海量数据的时间变得可以接受,同时又让内存的使用量控制在合理的范围内,这自然是很大的学问,这里不可能累述,我推荐去看各种专业书籍,比如《算法导论》。<br />第三, 库的使用:我们都知道技术问题的解决都是站在巨人的肩膀上完成的,很少有人什么都是自己做的,而且你设计的同样的算法和数据结构,往往并没专业库提供的效率高,原因自然是多方面的,比如一些针对编译器的优化,细节上的运算技巧等等,在因此库的选择成了左右程序的效率的另一个主要因素,当然这根本上还是对数据结构和算法的认识,无非就是无需去亲自实现罢了。<br />然后,我们必须明白,效率问题不是程序设计的唯一问题,甚至有时不是主要问题,尤其在CPU继续遵行摩尔定律在飞速更新的情况下,在一些非海量数据处理的程序里,效率问题并不是那么突出的,这里不是说效率问题不重要了,而是说效率问题和其他软件设计问题之间应该达到一种均衡,这里有如下几个问题:<br />第一、80-20法则,这是说,一个程序的20%的代码决定了这个程序80%的效率,举个很简单的例子,位运算比算术运算要快,因此位运算放在程序里的效率要高,但是这样的运算如果不是程序的核心处理,每次运行个一两次,这样的效率甚至可以忽略不计的,如果他处在程序的核心部份(也就是那20%的代码),每次运算个上百万次。优势当然就有所体现了,所以对效率的关注要有重点,不能面面俱到。<br />第二,移植性和通用性,这两个特点是软件界一直在追求的目标,对于移植来说,有些高效的设计往往是不可移植的(比如位运算在32位的CPU下和64位的CPU下的结果就未必相同),语言平台也同样如此,java的程序和c程序的移植性显然也是不可同日而语的;通用意味着代码的可维护性,高效的算法有时候是面对某些特殊的问题而设计,逻辑结构极其复杂,自然给后来的维护以及通用带来许多麻烦,这些问题要根据具体的情况加以均衡,其中使用各种通用程序库也是不错的解决方法之一。<br />无论如何,程序的效率依然是程序设计过程中一个非常重要的因素,因为CPU的发展速度还是远远落后于数据的处理量,但是凡事都不能过度,效率不是程序的唯一瓶颈,懂得均衡的设计才有可能是好程序。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116627262608748988?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1164712805681486442006-11-28T03:17:00.001-08:002006-11-28T03:20:05.683-08:00【算法】最大子序列问题本文件实现数组最大子序列问题的四种复杂度的实现。<br />//立方复杂度<br />int maxsubsum1(int *array,size_t sz)<br />{<br /> int maxsum = array[0];<br /> for(size_t i = 0; i < sz; ++i)<br /> for(size_t j = i; j < sz; ++j)<br /> {<br /> int thissum = 0;<br /> for(size_t k = i; k <= j; ++k)<br /> thissum += array[k];<br /> if(thissum > maxsum)<br /> maxsum = thissum;<br /> }<br /> return maxsum;<br />}<br />//平方复杂度<br />int maxsubsum2(int *array,size_t sz)<br />{<br /> int maxsum = array[0];<br /> for(size_t i = 0; i < sz; ++i)<br /> {<br /> int thissum = 0;<br /> for(size_t j = i; j < sz; ++j)<br /> {<br /> thissum += array[j];<br /> if(thissum > maxsum)<br /> maxsum = thissum;<br /> }<br /> }<br /> return maxsum;<br />}<br />//分治法(O(NlogN)复杂度)<br />int maxsubsum3(int *array,int left,int right)<br />{<br /> if(left == right)<br /> return array[left];<br /> int mid = (right+left) / 2;<br /> int rthissum=0,lthissum=0,<br /> rmaxsum=0,lmaxsum=0;<br /> int lmax = maxsubsum3(array,left,mid);<br /> int rmax = maxsubsum3(array,mid+1,right);<br /> for(int i = mid; i >= left; --i)<br /> {<br /> lthissum += array[i];<br /> if(lthissum > lmaxsum)<br /> lmaxsum = lthissum;<br /> }<br /> for(int i = mid+1; i <= right; ++i)<br /> {<br /> rthissum += array[i];<br /> if(rthissum > rmaxsum)<br /> rmaxsum = rthissum;<br /> }<br /> int max = rmaxsum + lmaxsum;<br /> if(max >= rmax)<br /> if(max >= lmax)<br /> return max;<br /> else<br /> return lmax;<br /> else if(rmax >= lmax)<br /> return rmax;<br /> else<br /> return lmax;<br />}<br />//线性复杂度<br />int maxsubsum4(int *array,size_t sz)<br />{<br /> int maxsum=array[0],thissum=0;<br /> for(size_t i = 0; i < sz; ++i)<br /> {<br /> thissum += array[i];<br /> if(thissum > maxsum)<br /> maxsum = thissum;<br /> else if(thissum < 0)<br /> thissum = 0;<br /> }<br /> return maxsum;<br />}<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116471280568148644?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com1tag:blogger.com,1999:blog-28193539.post-1163675488708336552006-11-16T03:08:00.000-08:002006-11-16T03:11:28.733-08:00技术学习的选择因素应该说我们很幸运,我们生活在一个百花齐放的技术世界,每个技术领域都有四五个方向可以选择,但是,这又是非常不幸的,因为选择正是一切痛苦的根源,很久以来,我就不停的收到提问,“我应该选择什么语言?”、“我应该学那方面的编程?”、“我应该选择那个平台?”等等,每次我都对提问者的具体情况做了详细的回答,但久而久之,连我自己都有一个要总结一下的欲望,看看那些因素应该左右我们的选择,或者说我们选择的时候应该考虑什么?<br />首先是市场,对,没错,我们生活在一个物欲横流的世界,我们不能也无法无视市场的作用,但是,很关键的一点,我们对市场的认识是基于什么的分析?这里有三个可能,<br />第一,来自身边的高手,这些人肯定至少在我们这些请教者看来在他自己的领域是有相当的能力和见解的,因此他们的建议肯定是值得关注的,但是我们必须注意两点,首先,你应该肯定一下,你请教他的领域是不是就是你选择的领域,而你请教的只是在这个领域内部的某个具体的选择,举个例子,你请教一个C#程序员,而他对.NET框架很有研究,那么你可以问他:“.NET框架在未来的几年里那些方面比较有希望?”但你千万不要问他:“J2EE和.NET那个好?”因为首先他会鄙视这样的问题,然后,就是他告诉你了他的答案,也不能保证这种答案的价值,因为他对J2EE的认识可能不如.NET;再次,你不能把他带有感情色彩的话太当回事,比如,“.NET是个垃圾,微软的东西都是垃圾! ”,可能他自己有充足的理由这么说,但是,这是不是垃圾应该你自己来判断,而且说真的,你还不知道他本人在某些方面是不是垃圾,如果是垃圾说的垃圾,说不定还是宝贝呢(双重否定等于肯定?)!是吧?<br />第二,来自媒体,网络上到处都有一堆一堆的统计数据,而且不可否认都有一定的准确性,关键是我们怎么用这些数据?我们知道程序员群体肯定是个精英群体,因此他的水平分布肯定是个金字塔型的结构,你把自己定位在那儿?人多,市场小,市场大,人就少,而且还要加上你的学习时间过后的走势,恩,不会比买股票容易,而且如果你能完全料准的话,还不如去炒股……<br />第三,来自身边的群体,大家学什么你就学什么,这样的好处是利于交流,而且大家都这样,有安全感,中国人也向来喜欢如此,但这个方法问题很多呀,你不知道为什么学?(因为大家在学)。你不知道学来做什么?(等看大家做什么)。你总是跟着,等人家在前面把市场占满了,还能跟吗?<br />所以,市场分析基本上是句空话,他最多只能给你一个大致的选择方向。<br />然后呢,应该是兴趣,你喜欢什么就学什么,这当然很好,而且我的大部分计算机能力也是这样得到的,但是这样也会遭遇一些尴尬的局面,你苦苦专攻了三四年,突然发现你很难凭他找到工作,因为你身边没这样的公司,而这样的公司离你十万八千里,或者公司里这样的部门人满为患,除非我们有诸葛亮这样的耐心和自信。否则肯定是郁闷不止。<br />所以兴趣可以成为动力,但不能指定方向,这个因素可以重视,但不能唯一依靠。<br />接着是技术认识,一项技术肯定具有他的意义,这些意义可能决定了他未来的走向,而且技术往往决定了一系列具体技术方向,比如虚拟机技术,java也好,。NET也好,都离不开这个本质,而这项技术又比较好的在一定的范围内解决了程序界一直在追求的移植问题,那么他应该值得你花点时间关注一下,一旦你掌握了虚拟机的基本原理。Java或者.NET对你都不是太难的问题了,学好了其中一个,另一个基本上也就不学自通了。<br />因此,对技术本身的认识是进一步选择技术发展方向的一个不可忽视的因素,这样的因素也一般是可靠的。<br />最后,我们还应该明白,如今并不缺乏多面手,缺乏的是各个领域的顶级的专业人才,我们应该固定一下自己的涉及范围,把有限的精力发挥好,这样才会有实质性的收获。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116367548870833655?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1163577134460473112006-11-14T23:50:00.000-08:002006-11-14T23:52:14.470-08:00今天难得早起,看了场比赛……对NBA的比赛写点东西吧,我是个学技术的,可能喜欢比较冷静的分析事情,当然我也非常喜欢NBA,从乔丹的第二次三连冠开始就一直没用停过,几乎每年都有很多时间来关注NBA,<br />今天的比赛火箭输给了马刺(84 : 92),结果并不出乎我的预料,虽然我对第三节最后两分钟感到惊讶,但是火箭的输球是有他的必然性的,理由有以下几点,<br />第一, 新人很多,阵容尚缺火候,特别是内线,主力前锋还受伤了,导致篮板差距很大,跟马刺的冠军阵容根本没法比。<br />第二, 心理素质也没法比,马刺基本三节落后,也没有朋盘,火箭一波三分就被打蒙了,不会打球了,当然马刺的稳定性向来是非常可怕的,<br />第三, 火箭是依靠球星的,马刺是个整体球队,球星不好,一切就玩完,马刺即使邓肯没法得分,其他人也能保持一定的得分能力。这就好像希腊和美国,就是球星发挥正常,几个人也无法赢得了一个得分和防守均衡机器一般队伍。<br />所以,火箭有进步,但离开冠军队伍还有很多距离,今天的比赛是两队水平的正常体现,yao和麦蒂都没有太多责任。他们还需要时间进步,提高整支队伍。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116357713446047311?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1163320689520538072006-11-12T00:36:00.000-08:002006-11-12T00:38:09.536-08:00有些时候,独裁是被迫的……最近以来,一直有人在我的留言本上发一些无聊的广告。删了又发,我真不懂这个家伙是什么心理里,于是给留言本加了两个功能,<br />一者屏蔽一些关键词,源码如下:<br />Function CheckBadWords(byVal theString)<br />Dim WordFilterEntry,WordFilterArray,re,theMatches,tmpString,i<br />Set re = new RegExp<br />re.IgnoreCase = True<br />re.Global = True<br />WordFilterArray = Split(WordFilterList,",")<br />For Each WordFilterEntry IN WordFilterArray<br />tmpString = ""<br />For i = 1 To Len(WordFilterEntry)-1<br />tmpString = tmpString&Mid(WordFilterEntry,i,1)&amp;"(["&Mid(WordFilterEntry,i,1)&amp;"_\s\W]*)"<br />Next<br />tmpString = tmpString&amp;Right(WordFilterEntry,1)<br />re.Pattern = tmpString<br />set theMatches = re.Execute(theString)<br />If theMatches.Count>0 Then<br />Response.Redirect("index.asp?Err=0x02")<br />End If<br />Next<br />set theMatches = nothing<br />set re = nothing<br />CheckBadWords = theString<br />End Function<br />二者屏蔽ip,源码如下:<br />Function CheckIP(IP)<br />IPFilterArray = Split(IPFilterList,",")<br />For Each IPArray IN IPFilterArray<br />FilterIP = Split(IPArray,".")<br />HostIP = Split(IP,".")<br />If HostIP(0) = FilterIP(0) AND HostIP(1) = FilterIP(1) AND HostIP(2) = FilterIP(2) AND HostIP(3) = FilterIP(3) Then<br />Response.Write("index.asp?Err=0x03")<br />Response.End()<br />End If<br />Next<br />End Function<br /><br />具体的屏蔽内容就不公布了,希望某些无聊的家伙能自重点,本来不需这样强制的,sigh。。。。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116332068952053807?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1163081062232512702006-11-09T06:01:00.000-08:002006-11-09T06:04:22.246-08:00光棍节之前的黎明不知不觉,这个日子要来了……<br />深怀感恩,又读过了孤独而自豪的一年。<br />满怀恐惧,我知道来年还要面对。<br />啊,我不是勉力四射的亚森*罗宾,所以我不敢抱怨,<br />我也不是福尔摩斯,因此此心依然深藏着渴望。<br />人啊,什么时候能得到完美,永恒的幸福?<br />无论如何,我的光棍同仁们,那是属于我们的时刻,<br />尽情的……狂欢吧!孤独的勇士们,不要浪费了这个无奈的权利。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116308106223251270?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com2tag:blogger.com,1999:blog-28193539.post-1162300362240655092006-10-31T05:11:00.000-08:002006-10-31T05:12:42.256-08:00推理之旅?(游魂归来)对于常光顾这儿的人来说,我几乎失踪了一个月,对的,我给自己放了一个长假,这段日子里看了一部动画片《名侦探柯南》,一部小说《亚森罗宾全集》,这两样东西都有一个共同的key word:推理,这也许是我除了专业以外最喜欢干的事情了。其实,准确的说,我对计算机专业的选择也要归结于对人类的逻辑推理能力的无限崇拜。<br />大约十二年前,一个极其偶然的机会,我读了一部《福尔摩斯探案全集》,从那时候起,福尔摩斯身上的智慧 魅力便开始成为我毕生的追求,于是我开始喜欢数学、物理,开始习惯独立思考,分析,然后将我得出的结论。取得的成果展现给身边的朋友,从而我就像福尔摩斯面对华生那样,得到了一种解决问题的快感和魔术师般的成就感,当然我也因此付出了性格的代价,我成为另一个不喜欢无聊,追求刺激,整天富有白日梦般的空想,但从来不喜欢耐心解释显而易见的现象的人,我承认我的很多朋友深受其害。我演绎法般的谈话方式让一些喜欢直截了当的家伙暴跳如雷(而且,实话实说,我的某些逻辑还未必正确),我自己倒是乐此不疲,罪过,罪过……<br />Anyway,细节-演绎法-推论-证明成了我基本的思维模式,因此我不会有信仰,不会有“绝对”,也许福尔摩斯在我心中的地位永远如此了,尽管他是个自闭的偏激的推理狂(工藤那小子也是被这样称呼的吧?谁让崇拜福尔摩斯呢?)。<br />让我也早日成为推理狂吧1哈哈~<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-116230036224065509?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1158314825893846382006-09-15T02:54:00.000-07:002006-09-16T00:32:55.423-07:00[Demo]PHP+GD2<strong><em><span style="color:#3333ff;">the code:</span><br /></em></strong><span style="font-size:85%;color:#339999;">//set up image<br />$img = ImageCreateTrueColor(250,250);<br />$backcolor = ImageColorAllocate($img,0,0,80);<br />$color = ImageColorAllocate($img,250,250,250);<br />//draw image</span><br /><span style="font-size:85%;color:#339999;"> ImageFill($img,0,0,$backcolor);<br />ImageLine($img,0,0,250,250,$color);<br />ImageLine($img,0,250/2,250,250/2,$color);<br />ImageString($img,5,250/2,250/4,"Jie Ling",$color);<br />//output image<br />Header("Content-type: image/png"); </span><br /><span style="font-size:85%;color:#339999;">ImagePNG($img);</span><br /><span style="font-size:85%;color:#339999;"> ImageDestroy($img);<br /></span><strong><em><span style="color:#3333ff;">the image:<br /><br /></span></em></strong><strong><em><span style="color:#3333ff;"></span></em></strong><a href="http://www.lingjie.net/blog/uploaded_images/drawimg-765679.png"><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://www.lingjie.net/blog/uploaded_images/drawimg-752579.png" border="0" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-115831482589384638?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com0tag:blogger.com,1999:blog-28193539.post-1156847904120392502006-08-29T03:32:00.000-07:002006-08-29T03:38:25.336-07:00谈谈信仰<span xmlns=""><p>有人问我, 是否有信仰,佛?上帝?真主?还是共产主义?我总是笑而不答,其实,我不信逻辑不能解释的东西,当然,他也确实不能解释很多东西,比如人的运气和机遇,但如果要勉强的解释(比如前世因果之类的),我倒认为不如不解释,我们没有必要为我们的子孙解释一切,子孙自然能解释他们该解释的东西,正如我们已经解释了的东西。<br /></p><p>我读过佛经、圣经但这些不能说服我,理由很简单,逻辑上不通,当然这是神、佛的思想,不是一个凡人能理解的,但是我不能无条件相信一种说法。信就有,不信就没有这种事情是不能接受的,既然是有的,那无论如何是有证据的,既然证据有为什么不能展示给活着的凡人呢?我是凡人,而且我还活着,所以我无法相信这一切。<br /></p><p>当然,共产主义是说活着的人能看见的,但是他的描述有个前提,他要求人的无私(上帝和佛都没有要求这点,他们只是希望考虑下来世和地狱的痛苦,本质上还是为了你自己着想),人能无私吗?至少我不相信能把社会制度寄托于人的道德。人的无私(当然是一个社会的所有人或者绝大部分人,一个两个做不来数的)从现在的逻辑来看是不可能的,到不如承认人的私有财产神圣不可侵犯来得实在,既然如何获得财产,让铁的法律去约束吧。哦。法律是有漏洞,但法律对每个人都一样,大家怎么做都自己明白,结果也大致差不多(当然是健全的法制下)。相对可以公平些。<br /></p><p>看来,公平几乎是这一切的根源,神佛公平,那为什么他让我们忘记前世的事情,却要负责前世的果?为什么地狱只有死人才能看见? 共产主义公平,可以按需分配。那么怎么证明你的需要,而且你真的需要么?人的需要如果失去了经济能力的约束会是什么样子?<br /></p><p>所以我无法信仰这些东西,我承认他们是哲学,是有利身心健康的,但也就如此而已了,我只相信逻辑正如达尔文那样有根有据的证明确实存在的东西。</p></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28193539-115684790412039250?l=www.lingjie.net%2Fblog%2Findex.htm'/></div>owlmanhttp://www.blogger.com/profile/17654927026606893978noreply@blogger.com2