玩我(外一篇)

昨天一个同事MM跑来找我们办公室的一个同事(俺的一个手下)。他们平时关系比较好,经常在QQ上聊天,结果今天MM过来时偶然发现他开了两个QQ,于是好奇心大起,把他赶开,看他QQ上都有些什么人,一边看一边在说:

“我倒要看看你开两个QQ在玩什么人……”

话刚说完,忽然想到什么,跳起来说:

“你不会在玩我吧?我要看……”

我在后面听到笑翻在地,那个可怜的DD却差点崩溃掉。^O^


外篇:“大卫·科波非耳效应”

在《反重力-_-|||》中那个家伙看来是要跟我叫板到底了,本来实在不想再跟下去了,因这让我想起当年跟一个练那什么功的家伙辩论一样,他们总是拿那老几样反复地说,再说下去也没有什么新东西。无趣得很。

如果他再不拿新东西出来,这就是最后一次回应他了。

# 回复: 反重力-_-|||

知之为知之,不知为不知,是知也。不要不懂装懂。对于经典力学而言量子力学是不可想象的。也许将来的新理论连爱因斯坦也会觉得不可思议。对于我们所在的这个宇宙我们了解的还太少。所以不要轻易相信但更不要轻易否定。

2004-9-10 21:30   by YDY

>知之为知之,不知为不知,是知也。不要不懂装懂。
这句话你自己留着比较合适。我虽然不是物理学家,不过不管是相对论还是量子力学,多少还是学过一些的,还曾经花了很长时间仔细研究过狭义相对论。
只要有完整自洽的理论,没有什么是不可思议的。比如爱因斯坦始终不承认“不确定性原理”,但不论小爱提出什么样的问题,玻尔都可以用量子力学的理论来说明。所以我可以接受量子力学。–不用说未来,六七十年前的理论爱因斯坦已经觉得不可思议了。
而对于反重力和飘升机,目前尚无任何相关理论–别跟我说那个“XX效应”,那只是个子虚乌有的名称,除非能提供关此效应的相关论文,有可信的计算可以得出此效应的大小,并且与实践相符。

BTW:我还发现了“大卫·科波非耳效应”呢,它可以让自由女神像凭空消失,这说明隐形人技术已经非常成熟了。不要怀疑其真实性,中央电视台都播了。^O^
>所以不要轻易相信但更不要轻易否定。


BTW:哀悼911死难者,以及俄罗斯的儿童,非洲的难民,阿富汗、伊拉克、巴勒斯坦的平民,重庆(特别是开县,十个月两次大灾)的灾民……
这是人类共同的罪恶……(一句借口)

BTW2:强烈抗议restart的专访。
另致JONI,特别反对在第四期期刊中采用restart的8挂专访,这将严重影响到期刊的质量,给读者造成期刊有庸俗化倾向的印象,并且将同时对JONI本人的RP造成不良影响,可能让人误认为JONI的欣赏品味严重下降。

意外发现

刚才在最新回复里看了看,居然发现一个叫vcbear的ID,面熟。

到他的BLOG一看,果然是当年在水园威风八面的vcbear。一篇《别让我恶心》仍是当年在水园时的风格。

浏览一下他的链接,果然又有新的发现:阿紫随风一个都灭有少。

水园早已不复当年的水园,就像现在MOP的外屋。不过MOP还有一个里屋,水园却灭有一个后花园。

唉,又怀旧了。

BTW:链接中新增传说中的阿土

BTW2:能完全明白我这篇POST在说什么的,一般是老CSDNer并老MOPer。^O^

BTW3:最新消息,CSDN即将推出免费邮箱 [email protected] 容量100M。

BTW4:请把花轻轻收起..放在心底..经Microsoft证实有骇客利用搜寻..找到放玫瑰花的人..再传送「花木马病毒」并开后门进入您的计算机…所以请尽快拿下..放朵真的玫瑰花在桌上…也请告诉你的朋友…别受害 …

被MSN上的人骂S了。-_-|||

BTW5:有人在我的《反重力-_-|||》那留言表示反对,为了慎重起见,我再次GOOGLE了一下相关的资料,很不幸,结果只有五条。除掉一条是无关的内容,一条是偶那篇POST以外,剩下三条中,两条来自新浪,主要内容就是我那篇POST里引用的那篇文章里说到的。另一条号称是北航的科研动态,难道俺打伪科学,结果打到真科学的头上?

在未有更进一步的理论支持的情况下,我将继续持怀疑态度。引力理论到爱因斯坦已经很完善了,在还没有任何超越广义相对论的理论的情况下,单凭一个子虚乌有的所谓“效应”就想搞“反重力”,感觉就像当年那些连数论是什么都不知道的人想证明“1+1”一样的可笑。

九月九日(外一篇)

历史上的今天:

1976.9.9-毛泽东逝世。

同日,我的一同学出生。

1999.9.9-结婚登记处人满为患,只是不知道他们现在的生活可好?


明天是教师节,自1985年第一个910教师节到现在,刚好是第二十个。虽然我经常说中国教育的不是,不过从厚道的角度出发,相当大一部分老师都是不错的,只是他们和学生们一样,也是体制的牺牲品。

感谢老师们!


外篇:三谈MD5的被破解

其实我们更应该从积极的角度来看待这个事件。

大家都学过马哲,矛盾从来都是在对立中发展的,并且将呈现出螺旋上升的态势。比如Shamir等人攻破了MH的背包公钥,但他也和别人一起提出了更好的RSA公钥。比如DES开始不安全以后,更多更强的加密手段也一一涌现。

所以说,王小云等人发现了当前所用的HASH算法存在的问题,同时也必将帮助未来的新的HASH算法设计者考虑到这方面的问题,使得新的HASH算法具有更好的安全性。

所以说,MD5被破解也未必就是坏事。

还是老子说得对:福兮祸所依,祸兮福所伏

我是如何上了Borland船的

昨天华前辈提起关于我“是如何上了Borland船的”问题,今天就写一篇说说,也算是简单记录一下这十年来作为Borland的忠实拥趸的回忆。^O^

93年刚接触电脑的时候,只能在学校的机房里,用V20(日本NEC产的一种8088兼容CPU)PC机在DOS下用GWBASIC,而且一周上一次机的机会都没有。那时别说BORLAND,连MS都不是太知道,只知道有个IBM。

94年因为已经没有计算机课了,所以不能去机房上机,还好隔壁班有几个同学自己在校外租了电脑搞打字培训(至今PF他们的商业头脑),于是就经常趁他们没有培训的时候去蹭机器用。因为流动性大,所以经常是揣着一迭软盘(还是那种老式的五寸盘)的。那时刚开始用C,当时绝大部分的C语言书都是以Turbo C 2.0为例子的,而用两张盘就能拷下的TC2自然成了我的最佳选择。从此开始上了Borland的船,只是当年也并没有特别在意。

到了95年,终于有了自己的电脑,虽然只是一台286/16/1M,不过却装了一堆的开发工具。因为机器配置差,所以这时开始比较经常地用起了Turbo Pascal 6.0,因为它的IDE比TC2好多了,速度又快,还能OOP,特别是那个叫做Turbo Vision的Framework。说到OOP,那时我也装了Turbo C++ 1.0,大概是因为软盘的问题(那时普遍没有光驱,软盘是最主要的软件交流途径),我搞到的那个版本浮点计算有问题,所以没怎么用。因为后来有一些书开始以MSC(Microsoft C)为例介绍一些DOS开发技术,所以我也装过MSC,不过用得实在太难受了,特别是它的调试功能,好像是一个叫CodeView的工具,跟Borland的Turbo Debugger比起来,简直就是“保10洁”和“保时捷”的差别。

Turbo Pascal 6.0和Turbo Debugger是我开始注意Borland的起点。

又过了一年,我装了一个Windows 3.1加Borland C++ 2.0开始做SDK开发,那是真是痛苦,要先在DOS下写好程序,然后编译,然后退出IDE,启动Windows GUI,再试着运行一下程序看看。

在忍受了一年之后换了机器,486DX/66/4M,终于可以在Windows环境下用Borland C++ 3.1 & Application Framework了,一个字:爽。BC31提供的在Windows下的IDE和调试环境,加上OWL库和BIDS(各种数据结构的类库,当然现在有STL,它早就没用了)都让我彻底上了Borland的船。

98年从乡下出来混以后,才发现自己多么落伍,因为不但是Borland C++已经出到5.02终结版,而且Windows开发也早就到32位环境下,VC一统天下了。到人才市场一看,周围人不是用DELPHI就是用VB,俺用一C++都不好意思跟人打招呼。-_-|||

只好再次动用俺的蹭机大法,买了本书在别人那蹭了一个星期的电脑,速成了一下DELPHI,总算是找到个饭碗了。

之所以会在DELPHI和VB之中选择DELPHI,除了DELPHI是Borland的产品以外,还因为俺对PASCAL的印象远比对BASIC要好,也更熟悉一些。而也是DELPHI让我没有在这一次从Borland的船上下来。

接下来的几年里,基本上都是在靠DELPHI混饭吃,越混就越不会想下来了。^O^

其间也有一次重新干起C++,虽然那个公司里别人都是用VC,还好开发的程序几乎都是用SDK和标准C++,所以我用BCB也没有什么冲突。

还有一段时间用汇编,那我也是用TASM+Turbo Debugger的。

至于华前辈说的“老板要求”这种情况我好像还没碰到过,应该主要还是开发人员自己的要求,这一点大多数老板还是都能了解的,当然应该是由用工具的人来决定选择什么工具嘛。

虽然Borland也曾经出过不少很糟糕的产品,比如自BC31以后,除了BC451以外,直到BC502,基本上都是惨不忍睹的。但是先入为主的影响还是很大的,而且Borland隔一段时间还是会出一两个像样的东西,让人总是会报有一些希望。

当然现在我已经是在SAP下用ABAP了,所以那些Borland还是MS亦或是SUN/IBM的问题,已经远没有以前那么在意了。

BTW:今天是98 CIFIT开幕的日子。^O^

BTW2:cynthia生日快乐!

白露闲谈

今天是白露,8过我出来得晚了,太阳出来很久了,什么露也没看到,大概只能晚上睡觉时“梦”露了。^O^

ARI昨天说台、疆对中国而言,类似于车臣对俄罗斯。我昨天也想过这个问题,因为我昨天刚好在论坛里看到别人贴了一个关于在新疆战东突的火星文章。

以我对台湾人的了解,他们是不可能去干恐怖活动的。一则终归是几千年中国传统文化教出来的人,奉行的宗旨是“好死不如赖活着”;再则现在台湾的各方面情况都还不错,还没到车臣人那个地步。

但是东突就很难讲了,毕竟他们都是跟拉登大叔有来往的。

BTW:违反了每日一博的规矩了。-_-|||

BTW2:不知道大家昨天有没有看了央视四套的可以来证实一下,据说

“在播放俄罗斯人质危机的新闻报导时,屏幕下滚动播出这样的信息:有奖竞猜:俄罗斯人质危机中一共有多少人丧生:答案A××人;B××人;C…D…,移动发送答案至××××,联通….;”

真不敢相信还有这么无耻的运营商和这么无耻的电视台……

BTW3:上面所说的事已经证实,详情请见央视国际网站上的节目录像

再谈MD5的问题

因为我手头没有像《应用密码学》这样的介绍具体密码算法的书,只有一本卢开澄的《计算机密码学》,主要是从数学的角度介绍了几类密码算法的原理及其适用领域。不过因为密码学是基于较为高深的数学理论,比如数论、群论、有限域等,但俺的数学不行,所以具体理论也说不出个一二三四来,只能泛泛地说个五六七八。^O^

昨天就王小云攻破MD5的问题讨论下来感觉比较零散,所以今天整理一下。

首先要说的是为什么需要使用密码?因为我们通常的通信环境是不安全的。

那什么是不安全的通信环境呢?不安全至少表现在两个方面:一是通信的内容可能被窃取;二是通信的内容可能被篡改

通常的密码使用就是为这解决这两方面的问题。

而如果有方法使某种密码的作用失效,就可以说这种密码被破解了。

当然不安全还有一些其它的方面,那些问题通常除了需要密码以外,还需要用一些特别的协议,很少碰到,这里就不提了。

常用的密码有很多种类,其中最常用的是这三种:
1、对称密码
2、非对称密码
3、摘要

对称密码的特点是:加密与解密用相同的密钥,甚至可能用相同的算法。比如从最简单的异或,到常用的DES、BLOWFISH、IDEA等。它们通常的用途是这样的:

发送方将源文(M)用密钥(K)加密:E=ENC(M,K)
然后将E通过不安全网络传给接收方,接收方用相同的密钥(K)解密:M=DEC(E,K)

只要算法足够好,并且保管好密钥(K),就可以保证这种通信是安全的,因为别人即使知道了密文(E)和算法ENC/DEC,也无法知道明文(M)。

对于这种密码来说,如果有方法可以从密文(E)和算法ENC/DEC中导到密钥(K)或明文(M),则意味这种密码被破解。比如简单异或算法就可以用统计分析法简单地破解掉。但即使是现在被认为不够安全的DES算法(已经有近三十年历史了),也需要有大量的明文/密文对(2的数十次方对),并需要大量的计算时间才能求得其密钥(K)。

非对称密码是因为这样的原因:因为在对称密码中,通信双方需要约定一个共同的密钥(K),如果这个约定过程也不安全,就可能出现密钥的泄露,而对于对称算法来说,密钥一旦泄露,之后的通信过程也就不攻自破了。

通常的非对称密码就是所谓的公钥密码算法,比如现在最常用的RSA(由R. L. Rivest和A. Shamir等人基于大数的因数分解极为困难的原理而创建),或是最近更为时髦的“椭圆曲线”,因为我的数学水平太差,具体算法也说不清楚,只知道大致是这样的:

顾名思义,它所用的算法特点在于加密与解密用的密钥是不一样的。做法大致如下:

发送方自己生成一对密钥:私钥(KA)和公钥(KPA)
接收方也生成一对密钥:(KB)和(KPB)
其中(KPA)和(KPB)是公开的
发送方用算法:E=ENC(ENC(M,KA),KPB)
进行两次加密,接收方用算法:M=DEC(DEC(E,KB),KPA)
进行两次解密,即可得到原文。
而其中双方都不需要知道对方的私钥,这就避免了约定密钥导致的不安全。
非对称密码的算法本身又决定了用私钥加密的内容必须用公钥才能解,反之亦然,并且算法还保证仅知道公钥和密文无法导出私钥,由此决定了通信的安全。

当然,如果有方法可以从公钥导出私钥来,则这种算法即告被破解。但至少目前RSA还是安全的,因为从现在的数学理论上可以证明RSA的算法是一类NPC(NP完备)类问题,只要密钥足够长(RSA要求至少是10的100次方以上,实际使用时更要大得多),以现在最先进的计算机来算,其时间成本也是不可能达到的。

摘要算法则与上面两种完全不同,前面两种密码是用于防止信息被窃取,而摘要算法的目标是用于证明原文的完整性,也就是说用于防止信息被篡改。通常也被称为:HASH算法、杂凑算法、签名算法。它的特点是:从不定长的原文中产生一个固定长度(如MD5是128位)的结果,称为“签名”(S),这个签名必须对原文非常敏感,即原文即使是有少量的变化,也会导致这个签名面目全非。比如传统的CRC或是现在要说的MD5、SHA等都是这类算法。

摘要算法的用途通常是这样的:

比如用户密码验证:如Linux或一些论坛用的方法,用户设置密码时,服务端只记录这个密码的MD5,而不记录密码本身,以后验证用户身份时,只需要将用户输入的密码再次做一下MD5后,与记录的MD5作一个比较即可验证其密码的合法性。

比如发布文件的完整性验证:比如发布一个程序,为了防止别人在你的程序里插入病毒或木马,你可以在发布这个程序的同时,公开这个程序文件的MD5码,这样别人只需要在任何地方下载这个程序后做一次MD5,然后跟公开的这个MD5作一个比较就知道这个程序是否被第三方修改过。

一个安全的摘要算法在设计时必须满足两个要求:其一是寻找两个输入得到相同的输出值在计算上是不可行的,这就是我们通常所说的抗碰撞的;其二是找一个输入,能得到给定的输出在计算上是不可行的,即不可从结果推导出它的初始状态

反之,如果某种摘要算法不能同时满足上面两个条件,则它就是不安全的。其实主要还是前一个条件,因为从理论上很容易证明后面一个条件基本上都是可以满足的:

摘要算法对任意长的原文产生定长的签名,按照香农的信息论,当原文的长度超过一定的程度的时候,签名中就无法记录原文中的所有信息,这意味着存在着信息的丢失,所以我说理论上不可能从签名中恢复原文。

为什么说理论上呢?就是说当这种摘要算法被完全攻破时,也就是说可以从签名恢复出任意原文,注意:是任意原文,因为所有的摘要算法的特点就是存在着一个无穷大的碰撞原文的集合。而真正的原文只是其中一份。对应这个无穷大的集合来说,这就是一个无穷小,便是我曾经说过的:

可能性为零,不表示不可能。

解释得具体一点是这样:假设原文含有信息量(I),而签名的长度有限(如MD5的128位),则它的信息量只有(i),因为通常 i < I (除非原文非常短),所以可以这么说:I=i+i’。因为I没有限制,而i有限制,则 i’ 也是一个没有限制的量。当进行摘要算法后,i’ 信息就丢失了。

反过来,如果现在这种摘要算法被攻破了,可以从 i 反推回去,但因为 i’ 信息已经丢失,意味着 i + I’ (其中 I’ 为任意信息)都可能是 I (碰撞)。但 I’ 是一个无穷集合,并且 i’ 属于 I’。这说明:理论上可以从 I’ 中找到 i’ 从而恢复出原文 I ,但是可能性为零(1/∞=0)。

但要做到前面一点就不容易了。因为绝对无碰撞的算法不可能是一个摘要算法,而只能是一个无损压缩算法。它必须包含原文的所有信息,也就意味着它一但被攻破,可以唯一地恢复出原文。并且它的结果肯定是不定长的,因为它需要包含原文的所有信息,当然会根据原文的长度而变。仅这两点就决定了,它不可能是一个好的签名算法

最主要的一点是:摘要算法的用途决定了,它只要能找到碰撞就足以让它失效,并不需要找到原文

以前面的两个例子来说:

比如Linux的用户安全机制,只要得到用户密码文件(其中记录了密码的MD5),然后随便生成一个碰撞的原文(不一定要跟原密码相同),就可以用这个密码登录了。

但后面的程序发布的例子就要难得多,因为它必须能生成特定的碰撞,即在程序中插入病毒或木马后再填充一些数据使之生成与原来相同的MD5。

不过我昨天仔细想了一下,以MD5为例,要产生特定的碰撞应该还是不太可能的,因为MD5的128位信息量已经有点大了,如果要产生特定碰撞,需要填充的数据可能非常之大,导致伪造的原文比真实的原文大得多,可能达到若干个数量级的差别,这样的伪造就已经失去意义了。

王小云的成果已经完全使Linux用的那种基于MD5的身份验证技术失效了,虽然从技术上说它被完全攻破,还为时尚早,但从法律角度上说,已经“动摇了差不多整个数字签名界的根基”(令狐语)。

BTW:毕竟不是专业干这个的,可能有些地方不对,还请大家斧正一下。^O^

不可原谅(外一篇)

北奥塞梯别斯兰市的人质事件终于悲惨收场,代价便是这数百人的伤亡。

凤凰网文《历劫后 止痛疗伤才开始》说:

人民永不会原谅(车臣的)恐怖分子,但也永不会原谅(俄国)联邦部队和普京。

世界的反恐却换来了越反越恐的结果。

据说易卜拉欣被抓起来,拉登也快了。

看样子恐怖份子们的好日子要到头了。

真的是如此吗?难道那些反恐的人就没有看到那些正是他们自己种下的恐怖种子吗?

难怪曹刿说:肉食者鄙,未能远谋。

也许肉食者未必不能远谋,也许这正是他们的目的。让全世界的人看到,这就是恐怖份子,然后便可以堂而皇之予以打击。

至于死在恐怖份子手下的几百个平民,一百多儿童,借一句阿诺的片名来说就是:Collateral Damage。


外篇:关于MD5的破解

CSDN一篇报道说中国数学家王小云等在Crypto 2004上提出一种能成功攻破MD5的算法,GIGIX王兄都在BLOG里引用了相关的报道。

MD5是一种摘要算法,所以理论上是不可能从签名取得原文。认为要从MD5的结果中取得原文才算破解,本身就是对摘要算法的误解。它通常应用于数字签名中,用于标识原文的原始性–即在签名后未作任何的修改。如果可以用不同的原文可以产生相同的签名,这也就意味着签名可能失效,就已经可以证明这种摘要算法的不安全。

RL提供的王小云的报告我看了一下,因为我不是做这方面的,所以对MD5算法本身的实现,以及文中所引用的之前别人的理论都并不了解,所以不是很明白。在这份报告中,介绍MD5破解的部分只有一页半,并未细说具体的算法,但在末尾附了两对1024位原文的碰撞例子,较之96年别人提出的512位碰撞有了很大的进步,并且计算量据说在一个小时左右。

这些都是进步,如果把这说成是吹嘘就未免有点妄自菲薄了。

王小云的发现证明了有方法可以产生碰撞,但正如GIGIX那边一位匿名兄所说,这只是非特定碰撞,而要伪造签名则必须能产生特定碰撞。所以说MD5并未被完全攻破,但也已经是一个重大的突破了。

修复98/2000双启动

一个98/2000双启动的系统,98装在C:,同时也是Primary主引导分区,2000装在F:,是扩展分区中的一个逻辑盘。

因为用PQMagic移动了98系统分区,导致双启动中无法引导98,但2000仍然可以正常引导。

分析:

首先,我们知道98的引导方式是源于DOS,即由512字节的引导扇区读入IO.SYS文件并执行,然后启动。

双启动的原理来自于2000的引导方式:由512字节的引导扇区读入ntldr,再由它去读boot.ini的配置,最后根据选择进行引导。其中,引导98的过程是这样的:

读入bootsect.dos(这就是安装2000时备份的原98引导扇区内容),然后仿照98的启动方式进行。

结论:

由于移动了98系统分区,所以原来bootsect.dos中记录的IO.SYS文件的位置已经不正确了,所以98无法引导。

处理方法:

1、手工修改bootsect.dos文件中记录的IO.SYS文件位置,但难度太大,不用。

2、设法重建bootsect.dos,麻烦,但较可行,故用此法。

具体处理:

为安全起见,一定要先备份C盘根目录下的所有文件(包括所有的隐藏、系统等文件)。

用98光盘启动(因为没有软驱,这年头这种古董完全没有存在的必要。一则因为跟U盘相比,软盘成本高,容量小,靠不住,携带不便,基本上已经没用;二则占地方;三则浪费电),选择不需要光驱方式启动,在生成的虚拟诊断盘中有SYS.COM程序,用命令:

SYS A: C:

其中A盘为光盘启动产生的启动盘映象。

重建98的引导扇区。至此98系统已经可启动,但双启动菜单没有了,无法启动2000。

下一步就是重建双启动。

因为原来的2000引导扇区被98引导扇区所替换了,所以无法通过ntldr进行引导,自然就没有双启动菜单了。

重建双启动菜单的做法就是:重新安装2000。当然不是完全安装,做法如下:

用2000光盘启动,自动开始安装过程,选择重装2000,然后安装在任一分区(最好装在原来的2000的同一分区),指定安装目录(千万小心不要覆盖原来的2000安装目录)

在重新启动时一定要眼明手快在双启动菜单中选择Windows(即进入98系统),然后修改C盘根目录下的boot.ini,将2000的引导目录改为原来的2000系统目录。

注意:如果重新安装时不是在原来的分区上,则一定要记得修改boot.ini中的partition号,如下面中的(5),否则将因为找不到ntoskrnl文件而不能启动。

multi(0)disk(0)rdisk(0)partition(5)WINNT=”Microsoft Windows 2000 Server” /fastdetect

重新启动即可进入原来的2000系统了。

最后把后来的2000安装目录删除即可。

为了这个问题从早上一起床就忙到现在,累S了,还好搞定。

表现与逻辑的分离

昨天一个同学在MSN上问我一些问题,他正在用DELPHI做一个东西,类似于QQ这样的,即对不同的IP发来的UDP包信息,用不同的窗口显示。其类图大致如下:

可以看出,这是一个很明显的表现与逻辑混合的设计:其中MainForm除了作为主窗体以外,还要负责创建ChatForm,并维护ChatForms列表,并且当收到UDP包时,还要负责将其分发到相应的ChatForm。结果只能是出现一个巨大无比的MainForm,在其中包罗万有,最后常常会造成难以维护的下场。

这是从RAD开始编程的人的通常做法,同时也是RAD工具被人垢病的一个主要方面。

所以我给他提了一个建议,如下图:

在其中插入一个中间类,用于把MainForm中创建和维护ChatForms的功能剥离出来。至于分发UDP消息的功能,暂时可以继续放在MainForm里,由TChatFormManager提供一个根据源IP查询ChatForm的方法,MainForm通过调用此方法取得相应的ChatForm,并将UDP消息交由此ChatForm处理。

其实这就是一种消除“坏味道”的重构,其做法便是所谓的“Extract Class”。

因为他这个东西我也没看到,不知道他具体要做成什么样,所以只能给一个这样的简单意见。在实际的开发中,情况应该会复杂一些,比如有可能需要把UDP的分发放到一个单独的类中处理,或者可能有不同种类的ChatForm,则需要有一个Factory Method来处理创建工作……等等。

随便说说,仅供参考。^O^

抗战胜利五十九周年

五十九年前的今天,日本鬼子签下了投降书,标志着抗战的最终胜利。

全国人民经历了八年多、东北人民更是经历了近十四年的艰苦抗争,终于坚持到了这一天。

BTW:本来早上看新闻说教育部反对教育产业化,还正高兴着呢,看了华前辈的《教育不敢产业化了》后,发现高兴得太早了。

BTW2:访问量过两万了。^O^

BTW3:在CSDN被人说了,算了,还是不说了,做人,要低调。-_-|||