2006年6月28日星期三

ASP.NET 设计优秀之处

我觉得ASP.NET设计得最好的地方,就是控件树的概念。虽然WebForm的概念很烂,误导了不少没有Web开发经验的程序员,但它带来的控件这一概念及控件树结构就真的很好。

控件树优秀的地方,就在于它把整个页面的处理逻辑分割到控件,控件与控件之间是松耦合的,不存在任何依存关系。以往的Web开发,所有的代码都是平板式的接受Request平板式的输出Response,Request被看作由不同的Request属性组成,Response被看作不同的Response片断,而这些由平板式的代码混合在一起处理,导致Request属性和Response片断之间的耦合度很大。而在ASP.NET中,一个控件就只取它需要的Request属性,然后对它输出的Response片断负责,那样就相当于解耦了。

如果两个控件之间存在一定的逻辑,这些逻辑就应该交给一个可信赖的第三方统一管理。一般情况下,这个第三方是父控件,因为父控件有权统一管理子控件的行为,所以子控件之间的交互逻辑也可以交由父控件处理。另一种方法是通过专门的控件负责,例如WebPart之间的逻辑(WebPartConnection)统一由ConnectionsZone管理。控件间逻辑集中在一个地方,统一管理,需要时统一根据涉及控件的存在性判断丢弃该部分逻辑或者抛出异常,这还算是一定程度上的松耦合度。

有很多ASP.NET的新手,特别是有ASP经验的,一上来就喜欢用Response.Write输出一些无法用控件输出的信息,其实这是不对的,任何一类信息都应该由专门负责的对象负责输出,如果不存在该类对象你就要自己制作一个负责此类逻辑的类。用Response.Write输出debug信息是常见错误,实际上应该开启Trace然后用Trace.Write或者Trace.Warn来输出debug信息。用Response.Write输出script也是很多人在用的方法,实际上应该用Page.ClientScript下面的RegisterClientScriptBlock等专用script注册函数。至于输出的是HTML的话,则绝对不应该用Response.Write了,如果没有任何控件能实现你要的输出逻辑,就自己写一个,按照自己的逻辑写Render,Render就是专门给你书写自己的局部HTML输出逻辑的地方,而且在Render中你最好用HtmlTextWriter的特有方法来输出HTML,因为那样做能够比较容易将Render的代码迁移到别的Mark-up Language输出环境。

2006年6月21日星期三

学习应该追求“游刃有余”的效果

“游刃有余”这个词是从哪里听来的呢?是某年GDKOI听郭嵩山(中大搞ACM兼负责广东省OI的那位)说的。他当时要表达的意思是,中大不会保送仅仅是竞赛好的学生,你必须平时学习也好才行,因此他说必须平时学习游刃有余才好搞竞赛,否则还是专心学习好。当时我就觉得这句话应该将因果倒置一下才更真实反映现实,那就是你平时学习保持在游刃有余的水平就够了,这样你才能够在竞赛方面有所发挥。

后来见到Coo的del.icio.us收藏了一篇文章,标题大概是“让一个人失去创意的最好方法就是让他超负载工作”。然后最近ziyan又说,Benny对着教学处主任说“想发展兴趣的学生是不能参加高考的”,于是我决定写一下这个题材。

“参加高考”指什么?当然不是指高考这几天的考试。我也去高考了,但对我来说无非是玩下,成绩也不入档案,更加不存在复习备考,所以不算“参加高考”。“参加高考”指的是由于高考而由高考那天此向前延伸1年的全年备考,甚至再向前延伸0至2年的部分自由的剥夺期,而这1至3年的时间里,你就处于那种“超负载工作”的状态下,所以“参加高考”实质上指的应该是至少1年的“超负载工作”。

然后有人会说,“不是啊,我高三很轻松很堕落啊”。这时候我觉得就有必要将“让一个人失去创意的最好方法就是让他超负载工作”这句话向广义推进一下,让主语变为“一群人”。由于你所处的群体处于“超负载工作”中,而创意往往是需要通过讨论、阅读等途径激发灵感,正如一个处于低温物体中的粒子一样,即使它有一个时刻处于高能状态,它也只能将能量散发出去,而不能长期处于高能状态。

如果一个学生能够让其学习保持在“游刃有余”的状态,无论他学习怎样,他总能够将他剩余的能量发挥到创意上面去,这才叫做“发展兴趣”。至于“发展兴趣”好不好,这就要看个人了。有些人天生喜欢跟大流,那是没得说的。有些人“发展兴趣”结果更好了,自然有些人结果更差了,这属于正常现象,否则所有人都去“发展兴趣”了。Benny说过,如果高考是独木桥的话,竞赛就是峭壁——很宽很宽问题只是你是否爬得上。

最后,就是必须区分“游刃有余”和“好吃懒做”。“游刃有余”并不能成为“好吃懒做”的借口,否则你将剩余力量都浪费掉了结果就当然比“超负载工作”要差。

2006年6月7日星期三

为什么 BBS 在中国那么火 (Part 2 - 社区生态学)

好了,抛掉那些有暴力没美学的沙子,继续挖掘论坛的金矿。社区研究之BBS的死亡鉴定里面的理论是"火了-水了-完了",感觉对于大多数公开论坛都正确吧,但其实这里讨论的都是仅做内容服务的论坛,人们来论坛的唯一目的就是论坛里的内容,所以必须以内容养内容。但是对于不用以内容养内容的论坛来说,例如提供下载服务的TLF,因为人们是为了下载而来的,所以即使内容不怎么样也会有相当的流量,流量多了自然有人发言,发言多了既然有精华,然而即使水了也不会完了,因为流量仍在,水多水少好像一个生态环境那样自然平衡,而下载服务就好像绿色植物那样维持着食物链的存在性。

还有一些看起来不完全是以内容养内容的论坛,但又没有绿色植物的,例如一些下载交换论坛。所谓交换,就是下载不是由官方提供,而是靠大家上传,如果人都走了同样论坛会死掉。不过这样的论坛有一个好处,就是文字内容不是价值的主要来源,价值的主要来源是上传,这时候哪些内容有价值哪些内容没有价值是非常容易区分的,也就一定程度上避免的水化这个过程。

讲到内容价值,就不得不讲精华贴这个设计。这个设计是用于奖励发贴者的吗?初衷可能是,但结果绝对不是,精华贴的作用是为了浏览者尽快找到他们要找的东西,即使他们在无聊闲逛也尽快为他们提供有新鲜的有价值的事物让他们结束无聊阶段。看看TLF,已经不仅仅是有精华贴了,而是贴子分等级了,普通贴子普通颜色,不同类型的"公务贴"用不同颜色的粗体显示,让你一找就找到你想要的东西。例如在字幕区吧,发布字幕的贴子为绿色,而求字幕或者讨论字幕的贴子则为普通的黑色,这样找字幕的人一眼就能够找到字幕。即使你通过电影名称搜索字幕吧,搜索结果里也会用绿色把发布字幕那一帖显眼的显示出来,当然还可能看到蓝色的显眼贴,那是测评。有些人说论坛社区是按主题聚合,Blog社区是按人聚合,什么聚合有什么特点,但现实是——只有你想不到的聚合形式,没有实现不了的聚合形式。TLF那样把不同版面同一类型的公务贴同一颜色标记,也算是一种对内容的聚合形式,不是吗?

回到生态学的问题上,既然说到了论坛社区和Blog社区,那么就开始用社区这个词而放弃论坛这个词。越复杂的生态系统就越难建立,但建立后就越能够抵抗外力,如果一个社区构成部分相对复杂一些,例如包括论坛、电台、下载、测评,那么即使一方面受到外力的打击但仍能维持流量,要恢复并不难。社区上各式各样的用户,就如各式各样的生物,有产出有消耗,但只要一个社区能够维持食物链的稳定性,那就能够幸存下去。然而很不幸,数量最多的是那些食物链顶端的终极消费者,也就是那些仅消费不贡献的(例如长年潜水的),反而最少的是绿色植物,也就是那些需求低了与无偿贡献的。由此看来,如果单单由用户构成一个封闭的生态系统,基本上是死定的,必须依赖于与外部的交换才可能让这个生态系统运作下去。如何算是和外部交换?例如用户可以选择付费,然后这些费用最终转变成一些收费信息的来源。

为什么 BBS 在中国那么火 (Part 1 - 整理及评论)

王冉的原贴在这里:为什么BBS在中国那么火,这只是一个起头,但它提到了一个"先进性"例子:"在国外(至少是在美国),虽然也有一些所谓的论坛,但是往往都是围绕一些窄众关心的具体话题,譬如某个学术问题、某部电影或者某款新电脑",这用于下文评论douban。

keso的东拉西扯:为什么BBS在中国那么火,我觉得既然要提早期Internet,就必须把概念分开来——BBS和Forum是两样不同的东西。虽然他们的很多特性看起来都一样,甚至使用起来也完全一样,但基于历史的原因我还是习惯把它们分开。BBS是Internet早期的产物,那时候还没有Web,消息都来自BBS,在当时的情况来说,BBS就是Internet的绝大部分,而后来的Forum则仅仅是Web的一种使用方式。BBS有一种特性,就是不可替代性,在那个时候你要获取信息就要通过BBS,你不能选择不用BBS或者用其他形式。从名字来看,BBS是电子公告版,而不是论坛,这就让BBS看起来有点官方色彩("官方"在这里指理想中的人民自愿放弃其部分政治权利而授权形成的政府)。至于为什么BBS后来在中国习惯被翻译为论坛,这可能就是问题的根源了,也就是论坛特性加上民族特性所造成的结果。

麦田在社区(1):聊天室启示录中,提到了论坛的技术零成本和言论零成本特性。技术零成本这没什么好说的,任何一个易用的产品都必须具有这样的特性。言论零成本,才是真正和民族特性结合的地方。因为中国人习惯了隐藏自己的欲望,特别是那些显得有点“坏”的欲望,然后又不同于菩提树下的顿悟——“我选择没有欲望,因此没有欲望满足不了的痛苦”,中国人会选择在适当的场合释放这些欲望,而且有可能是加倍的或者以变态的形式释放这些欲望。于是论坛就成了这样一个场所,和五谷轮回之所一样。“你有压力,我有压力”,“未解决”?那就去释放一下咯,只不过前者用于释放言论的压力,后者用于释放膀胱的压力。

中文BBS:红旗下的蛋中,麦田还说到了“网络暴力”的问题,他总结网络暴力的4大特点,看完后我真的想说——网络暴力现在主要发生在网上,那实在是一大进步啊!(他这里所说的“网络暴力”应该仅指论坛言论上的攻击。)回想一下,我们花了某十年时间去进行“现实中的网络暴力”,其特点也一定程度上符合那4点,那个伤害大啊,死了多少人经济损失多少,而现在这种单纯在网上的网络暴力,幸运的话仅伤你的ID(甚至仅伤马甲),不幸的话才伤到你个人,但至少不会搞出人命。

为什么论坛能够在这种事情上那么热?因为它提供了一个“无代价战场”。有那么多自称“爱好和平”的人士,正如我所说,他们需要释放他们对暴力的欲望,这个特定场所最好就是一个无代价战场。其实无代价战场有很多选择,不过Battle Field对于很多人来说都太具有战略性,GTA的英文剧情又不那么容易懂,这时候论坛的技术零成本就绝对会让它中标了,就那么简单。