2005年6月30日

[Collection]如何用正确的方法来写出质量好的软件的75条体会

1. 你们的项目组使用源代码管理工具了么?
应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。

2. 你们的项目组使用缺陷管理系统了么?

应该用。ClearQuest太复杂,我的推荐是BugZilla。

3. 你们的测试组还在用Word写测试用例么?

不要用Word写测试用例(Test Case)。应该用一个专门的系统,可以是Test Manager,也可以是自己开发一个ASP.NET的小网站。主要目的是Track和Browse。

4. 你们的项目组有没有建立一个门户网站?

要有一个门户网站,用来放Contact Info、Baselined Schedule、News等等。推荐Sharepoint Portal Server 2003来实现,15分钟就搞定。买不起SPS 2003可以用WSS (Windows Sharepoint Service)。

5. 你们的项目组用了你能买到最好的工具么?

应该用尽量好的工具来工作。比如,应该用VS.NET而不是Notepad来写C#。用Notepad写程序多半只是一种炫耀。但也要考虑到经费,所以说是“你能买到最好的”。

6. 你们的程序员工作在安静的环境里么?

需要安静环境。这点极端重要,而且要保证每个人的空间大于一定面积。

7. 你们的员工每个人都有一部电话么?需要每人一部电话。而且电话最好是带留言功能的。当然,上这么一套带留言电话系统开销不小。不过至少每人一部电话要有,千万别搞得经常有人站起来喊:“某某某电话”。《人件》里面就强烈谴责这种做法。

8. 你们每个人都知道出了问题应该找谁么?

应该知道。任何一个Feature至少都应该有一个Owner,当然,Owner可以继续Dispatch给其他人。

9. 你遇到过有人说“我以为…”么?

要消灭“我以为”。Never assume anything。

10. 你们的项目组中所有的人都坐在一起么?

需要。我反对Virtual Team,也反对Dev在美国、Test在中国这种开发方式。能坐在一起就最好坐在一起,好处多得不得了。

11. 你们的进度表是否反映最新开发进展情况?

应该反映。但是,应该用Baseline的方法来管理进度表:维护一份稳定的Schedule,再维护一份最新更改。Baseline的方法也应该用于其它的Spec。Baseline是变更管理里面的一个重要手段。

12. 你们的工作量是先由每个人自己估算的么?

应该让每个人自己估算。要从下而上估算工作量,而不是从上往下分派。除非有其他原因,比如政治任务工期固定等。

13. 你们的开发人员从项目一开始就加班么?

不要这样。不要一开始就搞疲劳战。从项目一开始就加班,只能说明项目进度不合理。当然,一些对日软件外包必须天天加班,那属于剥削的范畴。

14. 你们的项目计划中Buffer Time是加在每个小任务后面的么?

不要。Buffer Time加在每个小任务后面,很容易轻易的就被消耗掉。Buffer Time要整段的加在一个Milestone或者checkpoint前面。

15. 值得再多花一些时间,从95%做到100%好值得,非常值得。

尤其当项目后期人困马乏的时候,要坚持。这会给产品带来质的区别。

16. 登记新缺陷时,是否写清了重现步骤?

要。这属于Dev和Test之间的沟通手段。面对面沟通需要,详细填写Repro Steps也需要。

17. 写新代码前会把已知缺陷解决么?要。每个人的缺陷不能超过10个或15个,否则必须先解决老的bug才能继续写新代码。

18. 你们对缺陷的轻重缓急有事先的约定么?

必须有定义。Severity要分1、2、3,约定好:蓝屏和Data Lost算Sev 1,Function Error算Sev 2,界面上的算Sev 3。但这种约定可以根据产品质量现状适当进行调整。

19. 你们对意见不一的缺陷有三国会议么?必须要有。要有一个明确的决策过程。这类似于CCB (Change Control Board)的概念。

20. 所有的缺陷都是由登记的人最后关闭的么?

Bug应该由Opener关闭。Dev不能私自关闭Bug。

21. 你们的程序员厌恶修改老的代码么?

厌恶是正常的。解决方法是组织Code Review,单独留出时间来。XP也是一个方法。

22. 你们项目组有Team Morale Activity么?

每个月都要搞一次,吃饭、唱歌、Outing、打球、开卡丁车等等,一定要有。不要剩这些钱。

23. 你们项目组有自己的Logo么?

要有自己的Logo。至少应该有自己的Codename。

24. 你们的员工有印有公司Logo的T-Shirt么?

要有。能增强归属感。当然,T-Shirt要做的好看一些,最好用80支的棉来做。别没穿几次就破破烂烂的。

25. 总经理至少每月参加次项目组会议要的。

要让team member觉得高层关注这个项目。

26. 你们是给每个Dev开一个分支么?

反对。Branch的管理以及Merge的工作量太大,而且容易出错。

27. 有人长期不Check-In代码么?

不可以。对大部分项目来说,最多两三天就应该Check-In。

28. 在Check-In代码时都填写注释了么?

要写的,至少一两句话,比如“解决了Bug No.225”。如果往高处拔,这也算做“配置审计”的一部分。

29. 有没有设定每天Check-In的最后期限?

要的,要明确Check-In Deadline。否则会Build Break。

30. 你们能把所有源码一下子编译成安装文件吗?

要的。这是每日编译(Daily Build)的基础。而且必须要能够做成自动的。

31. 你们的项目组做每日编译么?

当然要做。有三样东西是软件项目/产品开发必备的:1. bug management; 2. source control; 3. daily build。

32. 你们公司有没有积累一个项目风险列表?

要。Risk Inventory。否则,下个项目开始的时候,又只能拍脑袋分析Risk了。

33. 设计越简单越好越简单越好。

设计时候多一句话,将来可能就带来无穷无尽的烦恼。应该从一开始就勇敢的砍。这叫scope management。

34. 尽量利用现有的产品、技术、代码千万别什么东西都自己Coding。BizTalk和Sharepoint就是最好的例子,有这两个作为基础,可以把起点提高很多。或者可以尽量多用现成的Control之类的。或者尽量用XML,而不是自己去Parse一个文本文件;尽量用RegExp,而不是自己从头操作字符串,等等等等。这就是“软件复用”的体现。

35. 你们会隔一段时间就停下来夯实代码么?

要。最好一个月左右一次。传言去年年初Windows组在Stevb的命令下停过一个月增强安全。Btw,“夯”这个字念“hang”,第一声。

36. 你们的项目组每个人都写Daily Report么?

要写。五分钟就够了,写10句话左右,告诉自己小组的人今天我干了什么。一则为了沟通,二则鞭策自己(要是游手好闲一天,自己都会不好意思写的)。

37. 你们的项目经理会发出Weekly Report么?

要。也是为了沟通。内容包括目前进度,可能的风险,质量状况,各种工作的进展等。

38. 你们项目组是否至少每周全体开会一次?

要。一定要开会。程序员讨厌开会,但每个礼拜开会时间加起来至少应该有4小时。包括team meeting, spec review meeting, bug triage meeting。千万别大家闷头写code。

39. 你们项目组的会议、讨论都有记录么?

会前发meeting request和agenda,会中有人负责主持和记录,会后有人负责发meeting minutes,这都是effective meeting的要点。而且,每个会议都要形成agreements和action items。

40. 其他部门知道你们项目组在干什么么?

要发一些Newsflash给整个大组织。Show your team’s value。否则,当你坐在电梯里面,其他部门的人问:“你们在干嘛”,你回答“ABC项目”的时候,别人全然不知,那种感觉不太好。

41. 通过Email进行所有正式沟通

Email的好处是免得抵赖。但也要避免矫枉过正,最好的方法是先用电话和当面说,然后Email来确认。

42. 为项目组建立多个Mailing Group

如果在AD+Exchange里面,就建Distribution List。比如,我会建ABC Project Core Team,ABC Project Dev Team,ABC Project All Testers,ABC Project Extended Team等等。这样发起Email来方便,而且能让该收到email的人都收到、不该收到不被骚扰。

43. 每个人都知道哪里可以找到全部的文档么?

应该每个人都知道。这叫做知识管理(Knowledge Management)。最方便的就是把文档放在一个集中的File Share,更好的方法是用Sharepoint。

44. 你做决定、做变化时,告诉大家原因了么?

要告诉大家原因。Empower team member的手段之一是提供足够的information,这是MSF一开篇的几个原则之一。的确如此,tell me why是人之常情,tell me why了才能有understanding。中国人做事喜欢搞限制,限制信息,似乎能够看到某一份文件的人就是有身份的人。大错特错。权威、权力,不在于是不是能access information/data,而在于是不是掌握资源。

45. Stay agile and expect change 要这样。

需求一定会变的,已经写好的代码一定会被要求修改的。做好心理准备,对change不要抗拒,而是expect change。

46. 你们有没有专职的软件测试人员?

要有专职测试。如果人手不够,可以peer test,交换了测试。千万别自己测试自己的。

47. 你们的测试有一份总的计划来规定做什么和怎么做么?这就是Test Plan。要不要做性能测试?要不要做Usability测试?什么时候开始测试性能?测试通过的标准是什么?用什么手段,自动的还是手动的?这些问题需要用Test Plan来回答。

48. 你是先写Test Case然后再测试的么?

应该如此。应该先设计再编程、先test case再测试。当然,事情是灵活的。我有时候在做第一遍测试的同时补上test case。至于先test case再开发,我不喜欢,因为不习惯,太麻烦,至于别人推荐,那试试看也无妨。

49. 你是否会为各种输入组合创建测试用例?

不要,不要搞边界条件组合。当心组合爆炸。有很多test case工具能够自动生成各种边界条件的组合——但要想清楚,你是否有时间去运行那么多test case。

50. 你们的程序员能看到测试用例么?

要。让Dev看到Test Case吧。我们都是为了同一个目的走到一起来的:提高质量。

51. 你们是否随便抓一些人来做易用性测试?

要这么做。自己看自己写的程序界面,怎么看都是顺眼的。这叫做审美疲劳——臭的看久了也就不臭了,不方便的永久了也就习惯了。

52. 你对自动测试的期望正确么?

别期望太高。依我看,除了性能测试以外,还是暂时先忘掉“自动测试”吧,忘掉WinRunner和LoadRunner吧。对于国内的软件测试的现状来说,只能“矫枉必须过正”了。

53. 你们的性能测试是等所有功能都开发完才做的么?

不能这样。性能测试不能被归到所谓的“系统测试”阶段。早测早改正,早死早升天。

54. 你注意到测试中的杀虫剂效应了么?

虫子有抗药性,Bug也有。发现的新Bug越来越少是正常的。这时候,最好大家交换一下测试的area,或者用用看其他工具和手法,就又会发现一些新bug了。

55. 你们项目组中有人能说出产品的当前整体质量情况么?

要有。当老板问起这个产品目前质量如何,Test Lead/Manager应该负责回答。

56. 你们有单元测试么?

单元测试要有的。不过没有单元测试也不是不可以,我做过没有单元测试的项目,也做成功了——可能是侥幸,可能是大家都是熟手的关系。还是那句话,软件工程是非常实践、非常工程、非常灵活的一套方法,某些方法在某些情况下会比另一些方法好,反之亦然。

57. 你们的程序员是写完代码就扔过墙的么?

大忌。写好一块程序以后,即便不做单元测试,也应该自己先跑一跑。虽然有了专门的测试人员,做开发的人也不可以一点测试都不做。微软还有Test Release Document的说法,程序太烂的话,测试有权踢回去。

58. 你们的程序中所有的函数都有输入检查么?

不要。虽然说做输入检查是write secure code的要点,但不要做太多的输入检查,有些内部函数之间的参数传递就不必检查输入了,省点功夫。同样的道理,未必要给所有的函数都写注释。写一部分主要的就够了。

59. 产品有统一的错误处理机制和报错界面么?

要有。最好能有统一的error message,然后每个error message都带一个error number。这样,用户可以自己根据error number到user manual里面去看看错误的具体描述和可能原因,就像SQL Server的错误那样。同样,ASP.NET也要有统一的Exception处理。可以参考有关的Application Block。

60. 你们有统一的代码书写规范么?

要有。Code Convention很多,搞一份来发给大家就可以了。当然,要是有FxCop这种工具来检查代码就更好了。

61. 你们的每个人都了解项目的商业意义么?

要。这是Vision的意思。别把项目只当成工作。有时候要想着自己是在为中国某某行业的信息化作先驱者,或者时不时的告诉team member,这个项目能够为某某某国家部门每年节省多少多少百万的纳税人的钱,这样就有动力了。平凡的事情也是可以有个崇高的目标的。

62. 产品各部分的界面和操作习惯一致么?

要这样。要让用户觉得整个程序好像是一个人写出来的那样。

63. 有可以作为宣传亮点的Cool Feature么?

要。这是增强团队凝聚力、信心的。而且,“一俊遮百丑”,有亮点就可以掩盖一些问题。这样,对于客户来说,会感觉产品从质量角度来说还是acceptable的。或者说,cool feature或者说亮点可以作为质量问题的一个事后弥补措施。

64. 尽可能缩短产品的启动时间要这样。

软件启动时间(Start-Up time)是客户对性能好坏的第一印象。

65. 不要过于注重内在品质而忽视了第一眼的外在印象程序员容易犯这个错误:太看重性能、稳定性、存储效率,但忽视了外在感受。而高层经理、客户正相反。这两方面要兼顾,协调这些是PM的工作。

66. 你们根据详细产品功能说明书做开发么?

要这样。要有设计才能开发,这是必须的。设计文档,应该说清楚这个产品会怎么运行,应该采取一些讲故事的方法。设计的时候千万别钻细节,别钻到数据库、代码等具体实现里面去,那些是后面的事情,一步步来不能着急。

67. 开始开发和测试之前每个人都仔细审阅功能设计么?

要做。Function Spec review是用来统一思想的。而且,review过以后形成了一致意见,将来再也没有人可以说“你看,当初我就是反对这么设计的,现在吃苦头了吧”

68. 所有人都始终想着The Whole Image么?要这样。项目里面每个人虽然都只是在制造一片叶子,但每个人都应该知道自己在制造的那片叶子所在的树是怎么样子的。我反对软件蓝领,反对过分的把软件制造看成流水线、车间。参见第61条。

69. Dev工作的划分是单纯纵向或横向的么?

不能单纯的根据功能模块分,或者单纯根据表现层、中间层、数据库层分。我推荐这么做:首先根据功能模块分,然后每个“层”都有一个Owner来Review所有人的设计和代码,保证consistency。

70. 你们的程序员写程序设计说明文档么?

要。不过我听说微软的程序员1999年以前也不写。所以说,写不写也不是绝对的,偷懒有时候也是可以的。参见第56条。

71. 你在招人面试时让他写一段程序么?

要的。我最喜欢让人做字符串和链表一类的题目。这种题目有很多循环、判断、指针、递归等,既不偏向过于考算法,也不偏向过于考特定的API。

72. 你们有没有技术交流讲座?

要的。每一两个礼拜搞一次内部的Tech Talk或者Chalk Talk吧。让组员之间分享技术心得,这笔花钱送到外面去培训划算。

73. 你们的程序员都能专注于一件事情么?

要让程序员专注一件事。例如说,一个部门有两个项目和10个人,一种方法是让10个人同时参加两个项目,每个项目上每个人都花50%时间;另一种方法是5个人去项目A,5个人去项目B,每个人都100%在某一个项目上。我一定选后面一种。这个道理很多人都懂,但很多领导实践起来就把属下当成可以任意拆分的资源了。

74. 你们的程序员会夸大完成某项工作所需要的时间么?

会的,这是常见的,尤其会在项目后期夸大做某个change所需要的时间,以次来抵制change。解决的方法是坐下来慢慢磨,磨掉程序员的逆反心理,一起分析,并把估算时间的颗粒度变小。

75. 尽量不要用Virtual Heads 最好不要用Virtual Heads。

Virtual heads意味着resource is not secure,shared resource会降低resource的工作效率,容易增加出错的机会,会让一心二用的人没有太多时间去review spec、review design。一个dedicated的人,要强过两个只能投入50%时间和精力的人。我是吃过亏的:7个part time的tester,发现的Bug和干的活,加起来还不如两个full-time的。参见第73条。73条是针对程序员的,75条是针对Resource Manager的。

2005年6月29日

使用Session

前几日一直在设计界面,原先采用过一个全局变量来控制一些panel的显示。
今天正式采用session来在页面之间传递变量值。
不用不知道,一用忘不掉。今天的进展很是顺利。我在session的基础上不但实现了不同权限用户的界面显示问题,还利用这个东西来控制一些控件的显示。
简单小结一下:可以用Session中装入一些变量,然后根据变量的不同值来确定显示。

还解决了一个问题,就是页面的转向问题,我采用的方法是Response.Redirect("index.aspx")来实现。

Datagrid中的模板列里面的Edit点击事件的相应问题也在我查了半天后得到了解决,现在发现微软的在线MSDN是个好东西,里面什么都有,而且不用安装在本地。这种在线服务非常好。

2005年6月28日

锻炼身体

前天晚上电视上看到采访《天龙八部》中饰演乔峰的胡军。胡军提到了小时候他父亲对他说的话:身体一定要锻炼好,那是工作和学习的本钱。胡军说他小时候领会的不好,现在感觉到身体是一切的本钱。是呀,人的身体只有一个,就像生命一样重要。我们没有理由不爱惜和锻炼好。
想想自己来京一个多月了,现在感觉自己长胖了些。这里的朋友们大都这样,因为除了睡觉和吃饭其他时间几乎都是坐着。整天这样肯定会长胖的。现在我们的锻炼非常缺乏。我想应该坚持一下以前在学校里面锻炼身体的频度。时不时的需要早起锻炼一下。现在早上一般都睡到八点才起床,一般是不会有时间的。我想还是晚上比较好些。呵呵,那就赶紧关上电脑回去跑跑步吧,反正今天的工作也已经差不多了。
88^_^

2005年6月27日

DataGrid

周老师还有三天就要回来检查我们的工作了,我和世奇今天都工作得非常投入。结合前几日得工作,我今天主要需要完成文件管理的数据库操作部分。按照原定的DataGrid方案,我现在网上找了大量的文章来学习如何使用DataGrid。现在真是一点一点学习呀,结合我需要实现的三个功能,我在网上找到对应的例子后就开始设计数据库了。
等到下午开始编程实现的时候才发现还有一个很难的东西——数据据数据在网页中的分页显示。这个东西说难吧,细想真是非常麻烦;不难吧,那是别人实现过,但是代码没有注释。最后没有办法了,俺就拿着代码在VS.NET里面跟踪执行,最后发现DataGrid分页功能是自带的,只需要通过页面索引连接的DataGrid1.CurrentPageIndex = e.NewPageIndex;之后再连接SQL数据库即可实现分页的自动显示。
工程这东西就是经验呀,知之为之之,不知为不知,是之也!全靠一点一点的经验积累,一点也不能含糊的。

2005年6月26日

八大处公园

今天是世奇的生日,又逢周日,我们二人约上中心那边的Carl,光光和晓光一起到北京海淀区的八大处公园游玩。这个八大处公园真是大呀,整个儿有400公顷。

所谓八大处指:

  • 一处长安寺:在八大处公路旁,是一座两进殿院的明代寺庙,寺内古铜钟系珍贵文物。

  • 二处灵光寺:建于八世纪的唐代,1071年辽代在此增建一座八角十层密檐宝塔,名招仙塔,后被八国联军所毁。但在清理塔基时,发现藏有"释迦佛灵牙舍利"。为珍藏这一佛牙之宝,中国佛教协会于1954年,便在此新建起一座八角十三层,高51米的密檐砖塔,高耸壮丽,成为八大处的标致之一。

  • 三处三山庵:仅一殿院,殿前汉白玉雕"水云石"极为精美可鉴。

  • 四处大悲寺:在平坡山腰,元代建筑,殿内有用檀香末与香砂混同塑成的十八罗汉,十分罕见。

  • 五处龙泉庵:清代寺观,其以流泉静趣而著称。

  • 六处香界寺:建于唐代,殿院重重,并设有行宫和花园,为历代帝王前来游山,降香时的歇息处。寺内有清康熙榜书"敬佛"二字御碑,是八大处最大的一座寺院。

  • 七处宝珠洞:在翠微山巅,寺内有一岩洞广深各5米,洞口岩石像似珠宝而故名。游人屹立山顶举目四望,壮丽江山一览无余。

  • 八处证果寺:在卢师山上,寺内有一岩洞,叫秘魔崖。崖洞内有石桌、石床、石门窗,洞外有招止亭,游客凭栏远望青山幽谷,大有欲醉欲仙之感。


到山顶宝珠洞后我们开始往回返,下山可以乘缆车、坐滑道、骑马,最终我们选择了骑马。我们五人每人一匹,我骑的是匹白马。由于全是下上的马道,马的主人是牵着我们的马在崎岖不平的马道上前行。一行途中看到一种名为“火炬花”的植物,说是两年开一次花,花朵酷似火炬状,开始我还以为是什么野果子那么大呢。
下了马道我们开始在水泥路上往下走,走到山脚时看到了一条小溪,小溪从另外一处山上流下。令人叫绝的是在小溪两侧是中国历代的印章,从最底部的毕曻发明活字印刷开始一直道山顶介绍到了清朝。有的印章甚至凿刻在水底的石头上。这里非常优雅,小溪在树林中迂回曲折给人一种室外桃源的感觉,沁人心脾!
原来这里是西山十二景之“水谷流泉”又叫“中华精印谷”, 文化内涵丰富,千余枚历代印章以石刻的形式集中于长约400米的自然沟谷之中。真是不枉此行呀。

2005年6月25日

周六的班

又是一个周六,考虑到明日要到北京八大处公园游玩以及即将被检查的任务,我和世奇今日都在实验室加班。
我的任务中还是那个令人烦恼的RichTextBox的问题。这个东西网上有现成的控件,但是不能直接使用,因为其中有版权的问题,还有些用法实在太复杂。弄了半天还是一点进展都没有。这可把俺整急了。
呵呵,后来俺来了一招“先绕过,再迂回”的策略。等俺有时间了再来解决这个问题。现在还得抓紧时间完成后面的工作要紧。想到这里不觉间轻松了很多。
现在需要完成的工作之中还有就是需要进行文件列表的显示和可操作。这个工作基本上可以采用DataGrid来绑定到数据库中实现。基本方向有了等到周一再来解决吧。
周末这里人非常少,中午和晚饭都只有我们二人在饭店吃饭,晚饭有幸吃到了北京的羊蝎子

2005年6月24日

ASP.NET中的RichTextBox

现在需要在网页的一个输入框中实现如下功能:

  • 1.支持自动的关键字颜色变化

  • 2.支持智能提示,就像VS中编程的时候那些自动提示的一样



分析了一下,在Windows Form中实现这个东西难度不是很大.但是现在的要求是要在ASP.NET的控件中实现这个东西难度很大.向蒋龙请教了一下后知道了这个东西实现的基本原理就是要实时监控RichTextBox中的输入,然后采用一个输入框来实现.由于C#中的类库非常丰富,我在手册里找了半天看到一个RichTextBox可以实现这个任务.但是后来发现这个东西是Windows Form的控件,在ASP.NET中不能显示出来.

想到可能别人已经实现过这个东西,开始在网上到处查找相关的内容.很幸运的找到了一些能够直接用的控件,,这里有一个控件网想必大家都能用上:慧都控件网.

但是最后都由于版权的问题或者IE安全级别调低的问题最终都一一放弃.想到原理咱都知道了那就自己实现吧,正好锻炼一下动手能力.开始的第一件事情就是要在网页中插入一个RichTextField控件,但是走怎么也用不了.在网上找了半天还是没有解决方案.
现在的感觉就是我的MSN昵称中的"兴奋 抑或 郁闷"的后者.呵呵,好像做工程特别是以前没有接触过的工程就会出现这种现象吧:)

问题摆在面前了,明日一定要解决掉这个问题.

刚才在网上找到如下一段信息:
Askhello, is richtext control available in asp.net.where is the control. how tio use it
AnswerRichTextBox is in the .NET Framework, but only for Windows Forms, not for Web Forms. This is because ASP.NET renders HTML, and HTML doesn't contain a RichText element.
So your answer will be to buy a 3rd party control that will likely render as an ActiveX object


呵呵,看来只能用第三方控件了^_^

2005年6月23日

网站点滴积累

用Visual Studio.NET里面的ASP.NET+C#做网站,对我来说这是个难事儿。不过在多日的小郁之后总算摸到了一点门道。记下这个经验想必是有用的,以算备份。
作网站就像做软件一样,需要有软件工程的思想,当然按照作网站的行话那叫网站工程。不用说,整个流程一定是需求分析、概要设计、详细设计、编码实现、测试,其中还有些螺旋反馈。前些日子一直在学习一些经验技巧,今日才开始真正进入角色。
先是设计了一个banner,采用用户控件的定制方式。感觉确实非常方便。在banner中加入了三个panel来针对不同的登陆用户进行页面的可选性显示。采用css来实现主题的托拽。采用表格的精确定位来实现确定控件的位置。
呵呵,这些东西我说出来想必你看了也会感觉很乱。这个东西需要实践才能搞明白。用Visual Sudio.NET来整这事的过程中感觉到了它的好处,很多东西直接用鼠标就能完成。当然更多的东西还是需要用html代码来实现的。
今日完成了整个东西的框架,我想再花几天我的工程实践就会有些成果了。
做工程和做研究有些相同的地方,这个主题留着等我重新开始做研究一段时间后再细细道来,朋友们要有耐心哦^_^

2005年6月22日

累掉一天

六月的北京分外热,在楼里呆着感觉不到户外的暴热。吃过晚饭和几位朋友一起到BUAA的乒乓球馆大战。
我们分到的球台是很靠墙角的地方,一个斜面压在头顶空间很窄,空气很乏闷。我和小崔打了几下又来了朋友,先就凑合着打双打了。天热,我们很快就大汉淋漓。也不知是昨晚凌晨看中青队VS德青队比赛后睡觉太少还是自己这段时间累着了,打了一个小时多点居然感到非常的累。这种累是来北京后没有出现过的。
回到寝室洗漱后就贪婪的睡下了。

2005年6月21日

Game: Bumper_Ball

This evening, after our supper, there was a movie in Compass room. After a tiring day, we were glad to watch it. However, ir was not interesting for me. I returned to my seat after an hour.
Johnny Cui called me to his seat. Then I knew he had found a nice little flash game. I played it with him. Its name was Bumper Ball. We two used one bot respectively. Just like the following picture.
How time flied. One hour had pasted. We enjoied ourselves very much.
It was nice for fun. You can try it under the link: http://www.bumperball.dk/
Jys for fun!

2005年6月20日

学到12:00

学习学到晚上12:00在来MSRA之前是常有的事情。可是来到这边我就没有这样经历过。晚上回到寝室洗完澡已是11:00,靠在床头一时没有睡意翻出书包里的《自然语言理解》。
这本书是在来北京之前两天实验室买回来的书,经过刘老师特准我把分到我手里的一本带到这边来了。过来以后一直没有恰到好处的时间和感觉来阅读这本书。我想读书,特别是一个专题的书,是不能三天打鱼两天晒网的。一定要一口气或者坚持每天读一点的去把它读完,否则过断时间脑袋里面就像什么也没有装过一样。
翻开书,看着自己以前在目录和前言中用铅笔做过的一些记录忽然想起来当时的想法。这本书89年第一版,95年第二版,作者是CL杂志的一位担任了10年的主编,内容非常精辟。忽然想起了刘老师发书给我的时候教导我的话:这本书是偏向语言学的,好好看看吧,恰好可以改善一下你们这些偏向机器学习的学生们。
灯光有点暗,看到12:00就困意浓浓了。
想来难得一次读书到半夜,回味着睡着了。
这本书确实需要坚持每天读一点的学习。

2005年6月19日

ASP.NET之CSS篇

脑袋里有了所要完成网站的雏形,可是设计网页的第一关就是定位控件。这个事情在我学习过的书籍和文章里面还没有提起过。在网上晃点一圈找到了CSS来完成整个工作。可是CSS的撰写很是麻烦,又没有找到工具来支持。还好在网上找到一个教程可以学习学习。
文章列表如下:


感觉这两天学了很都东西,又像什么都没有学到。一个字,杂!我想这个过程必须得要经历的。我想明天等我买的书送到后就可以准备按照软件工程的方法来实现了。

2005年6月18日

初夏的夜

晚上8:00从公司下班往回返,走在路上感受着京城的繁华。夜是一样的,我想这是各大城市的共同,无论哈尔滨还是北京。夜空悬着半轮黄月,之所以是黄的,我想这和北京的天气是有关的。
汽车在北京的夜里攒动,有如黑夜里的蚂蚁。坐在车里的人往外望着,此刻感到的是夜的孤独。
这个话题改日好好写篇,暂且搁下。

2005年6月17日

ASP.NET完全手册

在网上找到了这本入门书籍,一共七篇。今日主要学习了前两篇:概论和WebForm。在这两篇里面主要学习到了页面的处理内部过程:page-load=>page event=>page_unload。这个过程和我们撰写windows应用程序的时候基本还是一个道理的。我们可以在page_load时用IsPostBack来判断网页是否是第一次被请求。在page event中主要有表单校验IsValid和On_Clinck等事件。在Page_Unload时需要处理的内容主要是关闭打开的文件和数据库连接以及释放对象等操作。
第一篇主要介绍了一些.NET的历史优点以及ASP.NET的历史和对比ASP的优点。一句话说来就是ASP.NET继承了ASP的所有优点并且摒弃了其缺点和不足。现在的ASP.NET是一次编译后执行的,速度比起原先需要解释执行的ASP快了很多。

服务器控件的类型主要有一下几种:

  • 文本输入控件 textbox

  • 按钮控件,主要事件有OnClick,OnMouseOver,OnMouseOut等,属性主要是text

  • 复选控件 checkbox

  • 单选控件 radiobox

  • 列表框 listbox

  • RequiredFieldValidator

  • ValidationSummary

  • Panel控件,主要实现一个网页中包含多页页面

  • 选择控件:其中又包含单选控件radiobutton和多选控件checkboxlist

  • 图片控件ImageButtom

  • 列表控件 等效于DropDownList,目前比较少用

  • 重复列表 Repeater

  • 数据列表 datalist

  • 数据表格 DataGrid

  • 自定义模板:实现代码和网页布局的分离以及模板的重用



  • HTML控件主要有HtmlButton, HtmlImage, TextArea, InputHidden, HtmlTable, HtmlGenericControl和HtmlInputButton。

    今天就学习了这么多,明天学习第三篇ADO.NET数据库编程。其中肯定要学习到与SQL Server的连接。在我即将完成的工作中肯定少不了这个部分。

    今天已经是我的这个任务开始的第三天了。还需要花两三天来学习。我想明天之后我就可以开始一边巩固所学内容并且学习一些深一点的内容,一边开始撰写用户操作逻辑文档了。我想在我已经完成的那个Windows应用程序的基础上再结合即将撰写的清晰的用户操作逻辑文档我能够按时完成布置下来的任务。

    OK。今天虽然有点累,但是心情很好。明日继续!

    2005年6月16日

    ASP.NET入门

    提起作网站我以前用东方网页王做过一个静态的网站,感觉还是有些经验的。但是现在面临的任务是需要完成一个具有丰富界面的和用户具有良好交互能力的网站。此事难度较大。主要难度体现在需要首先弄清楚我们的和用具的交互的操作逻辑,然后封装好用户的操作流程,并绘制出基本的网页界面,最后再完成相关的事件相应。

    为了完成这个工作,我想我需要首先熟悉ASP.NET的编程方法。上午在陈议一个小时的指点下知道了基本的几个编程对象和容器模型。接下来在网上找到了一些教程来学习。个人感觉这个教程还是非常好的,特意收藏这些连接如下,页便于日后查找:

    ASP编程入门进阶(一):安装配置服务器
    ASP编程入门进阶(二):认识表单
    ASP编程入门进阶(三):接触脚本程序
    ASP编程入门进阶(四):内置对象Request
    ASP编程入门进阶(五):内置对象Response
    ASP编程入门进阶(六):Cookies讲座
    ASP编程入门进阶(七):内置对象Server
    ASP编程入门进阶(八):内置对象Session
    ASP编程入门进阶(九):内置对象Application
    ASP编程入门进阶(十):Global.asa文件
    ASP编程入门进阶(十一):Chat聊天程序
    ASP编程入门进阶(十三):Ad & Content Rotator
    ASP编程入门进阶(十四):Browser & Linking
    ASP编程入门进阶(十五):组件Counters
    ASP编程入门进阶(十六):FSO组件之驱动器操作
    ASP编程入门进阶(十七):FSO组件之文件夹操作
    ASP编程入门进阶(十八):FSO组件之文件操作(上)
    ASP编程入门进阶(十八):FSO组件之文件操作(中)
    ASP编程入门进阶(十八):FSO组件之文件操作(下)
    ASP编程入门进阶(十九):ASP技巧累加(二)
    ASP编程入门进阶(二十):ADO组件之显示数据记录
    ASP编程入门进阶(二十):ADO组件之插入数据记录
    ASP编程入门进阶(二十):ADO组件之分页程序
    ASP编程入门进阶(二十):ADO组件之修改数据记录
    ASP编程入门进阶(二十):ADO组件之删除数据记录
    ASP编程入门进阶(二十):ADO组件之查询数据记录
    ASP编程入门进阶(廿一):DAO SQL之建立数据库表
    ASP中使用存储过程

    2005年6月15日

    乒乓Club

    下午小组会议列出了新的任务,我现在需要学习ASP.NET构建网页的方法以及如何在网友中完成一个和用户很方便的界面交互工具。整个任务需要在半个月内完成,需要学习一些网络编程的方法。没有压力就没有动力,这个机会很好。我可以在其中学习到很多的网络编程的方法。当然其中需要采用的平台还是.NET里面的ASP。任务需要加紧完成,否则到了Deadline交不上可就不好办了。

    工作归工作,学习归学习,身体的锻炼还是必不可少的。否则就成了非可持续发展了:)这两天我给所有的VS和PS发了邀请信,最后共有20人注册到我们的Ping Pong Club里面了。按计划今晚我们活动,本来估计可能需要在BUAA租5个案子,结果实际人数和上次我们NLC小组内部活动一样,仅有10人参加。这次活动有两个WSM租的同学加入。呵呵,总算不是我们NLC租单独活动了。考虑到大家晚饭时间比较晚,我吧大家集合的时间推迟到晚上7:30了。还好我们最后7:30准时在BUAA球馆开打。照例是两个小时下来我们大家都累坏了。回到寝室感到浑身都舒坦了很多。

    锻炼身体是非常重要的,以后需要隔一天运动一次。这样才能可持续发展的^_^

    2005年6月14日

    C# XML 查找和修改方法

    XML的DOM模型允许进行节点的增删改。这个事情原先我是知道的。今天就有了这样的需求,我需要采用

    C#来实现这个任务。原先学习过一点Xerces下操作DOM的方法。今天开始在网上到处查找实现方法。
    C#下的DOM树节点的增加方法很简单。只需要预先用CreateElement创建一个新的节点之后再创建一些attribute和

    childs,把这些东西append到新建好的这个节点上。最后一步就是将这个节点append到DOM树中定位好的节点上


    DOM树中查找节点的方法随意想想肯定需要一些检索路径的设置以及检索Query的设置。使用方法就是在对

    应DOM的文档对象下使用方法SelectNodes或者SelectSingleNode,两个方法的唯一区别就是前者找回符合检索条

    件的所有节点,后者只找回满足条件的第一个节点。在方法的运用参数中需要写入的参数就是符合XPath的

    路径。路径下面有“\\”,“\”之类的常见方法。
    DOM树中节点的修改方法采用的是替换策略。就是把你需要修改的部分重新写好后将原来部分替换掉。在

    编程时先定位到需要修改子节点的地方,然后采用方法ReplaceChild(newnode,oldnode)来实现替换。
    基本的方法就是这样,使用起来也时很方便的。

    2005年6月13日

    Summarization Evaluation

    Dr. Lin is very famous in summarization evaluation. This afternoon, after our group discussion, I consulted Dr. Lin about summarization evaluation. During the ten minutes, I introduced one of my original draft papers on summarization evaluation.

    The basic idea of my paper was comparing summarization with original text. Dr. Lin gave me two points. Theoretically, if we picked out the odd and even sentences for a summarization respectively, they were equal by my means. The second point was just as Dr. Tliu and Carl had pointed out. That is under my evaluation means there was a perfect summarization by picking out the sentences with best similarity. They two were the dead centers of my paper. Dr. Lin pointed them out in a very short time. I admired him very much. At the end of the short discussion, I told something about the operating system requirement of his ROUGE system.

    If you do some research, you must keep patient and progress step by step. This was my feeling.

    2005年6月12日

    CL之学习

    完成今天的加班任务后晚上我开始思索近期的工作。所谓人无远虑必有近忧。二十多天来我从事的多是工程方面的事务。我已经很长时间没有阅读NLP方面的论文了。我想,这对于以研究为主的我来说是危险的。想到这里在网上开始收集一些论文。先是想要阅读一些Coreference Resolution方面的论文。找来找去最新的论文也就只有五篇。和秦老师联系后得知了我曾经指导过的两名学生在完成指代消解方面的研究进展情况。李正华忙于考试没有什么进展,黄旭在毕业设计的压力下进展较多,基本上按照我预期的目标完成着。

    记得我来MSRA之前我在一次和老师闲谈时说过我到这里来的目标是长见识、学东西、打基础,不在乎有什么突出贡献。刚到这里的新生培训上Eileen也要求我们一定要给自己定位好到这里来的目的,否则你会发现过了几个月你会感到很失落。在这些日子里,我的工作完成得还算顺利,多是些编写界面或者连接数据库方面的工作。有时候会觉得自己在研究方面有点闲。上次听完韩家炜老师的报告后打算看看机器学习方面分类方法中的一些新方法。看了几篇文章后感觉不是很系统也就有了中断的念头。今晚找到的论文有Xiaofeng Yang的ACL2003、2004、2005上关于Coreference Resolution方面的文章,还有几篇是加拿大的计算语言学会议上的论文。在查找这些论文的发表时间信息时查到ACL的论文库里面去了。后来又查到MIT的Computational Linguistics最新一期上有一篇免费文章,顺藤摸瓜又看到了CL历年的期刊。CL是我们NLP届顶级的期刊,这里的文章都可以说是经典性的。我们初学做研究的人最终要的就是要多阅读经典的文献。我在进入IRLab的近两年时间里做过好几个研究点,阅读过的论文也不少,但是真正经典的论文不多,读懂读透的也不多。我记得自己在做一个研究点的时候经常借鉴别的研究点的方法和技术。着让我想到了NLP整个领域内的研究应该是相同的,多多阅读一些这个领域里除了Coreference Resolution方面的论文对于将来从事Coreference Resolution的研究是很有帮助的。现在的我已经有好长时间没有阅读好论文了。忽然间我有了想要阅读CL里的文章的想法。考虑到以前一位老师介绍过的研究经验,我查看了一下打算从CL 2000开始看起。有人说过想到不如做到。为什么自己不能现在就开始阅读这些文献呢。我想从现在开始好好阅读CL文献,等到半年下来一定会学到很多的知识,积累非常丰富的经验。当然,我知道要想坚持半年的难度很大。这需要自己每天除了完成规定的任务外还需要抽出时间来阅读论文。

    一时间想到了陪伴我多年的卧室里面墙上自己当年歪歪扭扭写的一句话:学习的时间总是有的,问题是你愿不愿意挤、善不善于钻。

    2005年6月11日

    京东大峡谷

    今天端午节,按照习俗我们要吃粽子。我们实验室在京的现在有四人:世奇, 永光,晓光 和我。我们打算一起聚聚,一起吃粽子,算是团圆:)

    活动方式我们探讨了很久才和我们这边的NLC小组大家提议的京东大峡谷游览活动相结合。由于NLC几位同学有事我们的活动差点取消。在晓光的提议下我们四人打算自己去那里。昨天晚上我在网上查了半天也给那边的旅游局打电话摸清情况后准备今天上午前行。后来NLC又有重大的陈议、天大的徐军和刘菁菁和我们一同前往。这样我们的七人团体就组成了。

    按照昨天制定好的日程安排我们早上6:00起床,打车到东直门汽车站和永光、晓光汇合。等我们的坐918专线到平谷县后已经是上午9:30。转乘面的我们10:00到达京东大峡谷的售票处。又再转乘一辆面的五分钟后我们才来到了峡谷的入口处。

    时间过得真快,一晃就到10:30了。大家早上几乎都没有吃饭现在肚子早已咕咕了:)。在一个农家饭店我们匆匆吃完早午饭(早饭和午饭一并解决:)后稍加休息。我们于12:00开始正式登入大峡谷。

    网上查到的景点描述如下:

    京东大峡谷旅游区位于京东平谷,由大峡谷与井台山两大游览区组成,总面积20平方公里。大峡谷狭险幽深,壁立万仞,井台山平阔如台,高耸连云,有联赞曰:“探峡谷感受神秘清幽,登高峰尽揽千山万壑“。

    大峡谷纵深六华里,景有五奇:一曰飞流直下:有瀑布高30余米,飞流直下,令人叹为观止,其声于谷中轰响不绝;二曰崖高万丈:谷内高崖,形如壁立,直刺青天,行于其下,直疑其欲倾即倒,心悸胆寒;三曰明潭连珠:谷内有五潭,或清可观鱼,或深不可测,或静若处子,或湍泻奔流,连成一串,为大峡谷添不尽之灵气;四曰栈道悬空:大峡谷狭而曲,陡而险,游览栈道悬于半空,行于其上,顿觉峡谷之险,且增无边情趣;五曰湖明镜清:龙门湖4万平方米,群峰倒映水中,鸥鸭栖身水上,又是一番别样景致,游人嬉水踏浪,泛舟垂钓,好一番归隐之情。

    景区内主要景点有:

    一、五龙潭

    即天然形成的五个潭,独出新裁,绝不雷同,水盛时,涛声不绝于耳,水落时潭潭盈满流水潺潺,潭潭惊险,游人无不观之而称奇,有诗赞曰:“苍天造化五龙潭,龙潭瀑水历天干,千峰万壑疑无路,路在潺潺一水间。”

    二、通天峡

    通天峡象一座齐天高的山峰被震裂形成的很长狭缝,远观峡缝在两边青苔杂草、灌木的掩映下,似裂似连,若走近观看,峡缝最窄处也有1米宽,;在其高而似连,抗战时期这里生产军需品,小型兵工厂遗址就在它的旁边。

    三、栈道

    京东大峡谷以五潭称奇,然而跨四潭的栈道也称标新立异,各不相同,成为大峡谷的又一奇观,一、二栈道依崖而成,似长龙卧坡,四潭栈道由数十根钢索相连而成,攀崖而上,跨潭而过,似卧顶长虹,走在上面摇摇晃晃,险象横生,难免不让人想起红军强渡“大渡河”、勇过铁索桥的壮举,游客们身临其境,其感觉自当终生难忘。

    四、龙门湖

    京东大峡谷不仅四季看山,还可以玩水,7万平方米的龙门湖可溶水70万立方,水面有快艇8艘,可以戏水,又可以乘渡到两岸游览。


    我们的行程基本就是按照这些介绍的顺序来游览的。其中值得记下的有这么几处的游览:
    像龙庆峡一样,这里有一条很长的索道,全长1000米,单程时间有13分钟。整个索道建造在峡谷上面。上去时每个缆车两个座位,我最后一个上缆车所以一个人坐一个。缆车就是公园的那种长椅类型的再加上一个护栏,所以能够清楚的看到外面的一草一木。缆车的速度是每秒1.5米。当我悬在峡谷上空的时候,看着下面的深谷开始还隐隐感到有点害怕,心想这要是掉下去肯定没救了 :)
    沿着缆车道一共有11根大柱子,据柱子上的大喇叭介绍整个工程是1997年11月道次年6月完成的。看着悬崖边上的大柱子,真的很难想象当时建造的时候是什么样的情形。13分钟后登顶,我们在一个山顶公园里面的五个观景台往山下俯视时真有一览纵山小的感觉。
    都说下山比上山容易,可在索道的缆车上我感觉比上山的时候更加险一些。呵呵,一个人坐一个缆车就是好,我把脚抬起来,整个身子斜躺在缆车上。这样坐着下去的时候感觉休息好了很多。

    下了索道后我们开始去爬最后一个景点:通天峡。我从头开始计数,到顶一共也就350级石阶。等到150阶的时候我的前面突然出现一个很小的洞,彷佛等到尽头。但是开始爬的时候明明看到有人在很高的地方。感觉这里一定有上去的方法。我往上爬到洞里后感到这里只有一米宽,往左侧就看到了几个石阶,挪动着身子才钻爬了上去。这里的这个洞还好。等我们到了280阶左右又出现了一个这样的洞。这次就没有上次那么容易了。这里的台阶几乎没有,只有几个石棱,小心的蹬着爬上去,有一段还需要将腿跪在一个石面上才能爬上去。我上去了后面紧随着一对年纪比较的大的夫妇二人。他们在这里真是骑虎难下。上去吧,感觉太难太险;下去吧,台阶又挺多挺险的。他们二人先是妻子爬上来。我在上面拉着她的手指导着往上蹬石棱。快要拉上来时突然她说:“我不行,上不来了。我还是下去吧。”这可把我急坏了。这个时候上来还有最关键的一步,只需要拉着我的手迈过来就可以了,如果还要下去那难度就更大了。我让她保持冷静不要着急,踏到那个石棱上在迈过来就可以了,很简单的。这样,终于我把她拉上来了。等到那位老先生也被我拉上来后我才发觉自己也出了一身冷汗。还好他们二人都平安的上来了。一下子,我感觉到坡底的告示上除了要求未满18周岁的人不能上来之外还需要要求老人特别是有心脏病之类的不能上来。试想如果这两位老人如果没有遇到别人的帮助怎么办?
    还好,经过这两个险关后我们顺利登顶了。总共350阶。下坡是另外的一条道路,这里的石阶非常的方便安全。我们顺利到底。

    在山谷里往回返的时候我们大家都非常高兴。遇到一个卖西瓜的老人我们非常舒服的享用了一个西瓜。之后就回到了山脚的停车场,再包上一辆面的回到了平谷,在转车两小时回到了东直门。我们晚餐在知春路上的九头鹰吃的。

    等回到寝室已经晚上9:40了。哈哈,早上6:00起来一直忙到了这会儿。我们都累坏了,很快也就睡觉了。

    今天玩的很开心!

    2005年6月10日

    关注五年的硕博连读

    今天在我们学校的网站上看到了这样一天新闻。最关键的两条内容如下:

  • 我校博士研究生培养年限一般为3~4年,特殊情况下最长不能超过5年,即博士生应在入学后5年内完成博士学位论文,并进行学位论文答辩。

  • 硕博连读研究生培养年限一般为5年(自硕士生入学时起),特殊情况下最长不能超过6年。



  • 这个消息对我们这些硕博连读的同学来说既是好消息又增加了难度。好消息是因为我们能够在5年内把博士念完,难度在于我们计算机学院毕业的要求一年比一年高,反过来时间又要求越来越短。

    这让我想起了一位朋友和我讨论过的“没有压力就没有动力”的话题。当时我们讨论的焦点是英语背单词的情形。有人能够在比较短的时间内背完我们感觉很多的托福和GRE的单词;而有些人也背过,但是没有坚持下来,时间长了一些后就忘掉了以前背的那些不是很常用的单词。联想初中学生初学英语的时候,很多学校的老师要求学生背诵甚至默写单词,写不出来就会被批评或者被罚。在那种环境下初中生们背单词往往背得很牢固。呵呵,现在想来我初中背过得单词还真是一点都没有忘。

    同样的硕博连读要求提高了或者说是压力增大了。这本身是件好事。借此契机我想好好努力争取按时完成学习任务。当然,需要学习的东西还有很多。现在我身在MSRA每天除了完成需要完成的任务外还有一点时间。我可以好好利用这些时间每天学习一点NLP和NLU方面的东西。每日进步一点点,我想这就是学习和成功的秘诀吧。

    2005年6月9日

    感受MSRA

    来到MSRA已经22天,在这里每天。工作日里每天的生活都是满满的。每日需要处理的东西几乎是在一次次的讨论中确定好的。每个任务都比较明确。这里的会议不是很多,和我们在实验室的时候差不多,大会小会加上自愿参加的会下来每周平均有五个左右。

    今天参加了两个会议。一个是上午的项目会议。会上见到了到目前为止我见到过的最壮观的阵容:一群牛人和我们四个学生在一个仅能坐下10人的屋子里面开会。到场的有MSRA NLC的全部大牛:我们的mentor周明老师,微软MSRA四少之一的高剑峰,我一直崇拜的Machine Learning牛人李航,新加盟的信息抽取专家牛成,以及在这里作访问学者的美国ISI做文摘很有名的林钦佑和加拿大蒙特利尔的信息检索大牛聂建云。这是我在这里首次参加这种讨论会。会议总共开了两个小时,席间感受到了大牛们考虑问题的角度和方法和我们不太一样。MSRA作研究都是考虑到了将来的产品化。两个小时下来我们的讨论富有成果。会后我们四位学生和周老师交换了一下最近的项目进展。再等一段时间我就可以切换到一个研究味儿浓一些的任务了。

    下午Eileen来到我和世奇的座位。原来她今天晚上零时有事不能主持今晚的English Corner,想要我们俩负责晚上的活动。一会儿和主讲人Francois交换了一下活动的安排计划。按照Eileen的安排我们去买好了署条爆米花等。到了6:40活动如期举行,Francois给我们介绍了很多的法国趣事。从大家熟知的法国化妆品开始,一直介绍了法国的教育系统、著名旅游景点、国际大企业、计算机科学研究情况以及怎样申请到法国留学等等。Francois非常健谈,原定一个半小时的交谈由于大家经常自由发挥,然后又就一些有趣的话题深入讨论,等到结束时时间已经到晚上10:00。活动最后剩下世奇,我,主将人和他的两位法国朋友,还有两位part time的同学。

    回到住处快要到11:00了,抓紧时间抢在11:00停热水之前洗漱完毕后我们就困着睡着了。

    很充实的一天!

    2005年6月8日

    [Collection]C#Windows控件的焦点事件顺序

    以下是测试TextBox事件的结果,如有不对,还望更正。

    一、用鼠标点击控件,然后离开。

    Enter
    GotFocus
    LostFocus
    Leave
    Validating
    Validated

    二、用鼠标,当 Validating 中 CancelEventArgs.Cancel = true 时:
    Enter
    GotFocus
    LostFocus
    Leave
    Validating
    Enter
    GotFocus

    三、用tab键经过一个控件时。

    Enter
    GotFocus
    KeyUp
    Leave
    Validating
    Validated
    LostFocus


    四、用tab键当 Validating 中 CancelEventArgs.Cancel = true 时

    Enter
    GotFocus
    KeyUp
    Leave
    Validating
    Enter
    KeyUp

    2005年6月7日

    C#下DOM编程

    前几日用C#写过一个将XML文件导入数据库的程序,当时采用的是C#中自带的XMLReader类库来完成这个工作。XMLReader原理和经典的SAX很相似,但用起来方便些。今日需要处理一些XML文档,既要读又要写,自然想到了采用DOM模型来完成。

    C#中对于XML的支持真的很好,不但有专门的XMLReader和XMLWriter还有DOM。这里就说说简单的DOM的使用方法吧。

    基本来说C#下的DOM和Xerces 中的DOM操作类似。先要申请一个DOM文档对象, XmlDocument myDoc = new XmlDocument()
    定位节点采用的是 myDoc.DocumentElement.ChildNodes[0].ChildNodes[0].ChildNodes[0]来完成
    后续的节点上的属性的调用就采用一些诸如Value, InnerXML, InnerText等来访问。
    生成心的节点也和Xerces类似,基本方案是CreateElement之后加上需要的属性和InnerText。完成这些后就定位好后可以采用方法AppendChild来完成树上节点的添加。

    整个过程还是很好理解的,相应的程序也很快完成。明日需要和际洲讨论一些接口问题。今天就工作到此了。回去休息一下。

    2005年6月6日

    韩家炜老师的演讲

    早上有一个关于数据挖掘的讲座,主讲人是大名鼎鼎的韩家炜老师。我第一次听说韩老师的大名那是在研究生课程中学习数据挖掘的时候,我们的主讲老师对韩老师推崇有佳。终于今天有幸目睹了大师的风采。

    韩老师现在是华人里面作数据挖掘最出色的研究人员。他现在是美国伊利诺斯大学计算机系数据与信息系统实验室数据挖掘组的教授。韩老师给我们介绍了他带领的研究小组。他的组员大约有8人,除了有两名来自希腊和韩国的学生外全是中国留学生。半个月前新到的一批VS培训的时候我见到的陈红同学就是他的学生,现在利用暑假在这里作VS。很高兴的是在韩老师现在的组员里面有一位是来自哈工大的学生。这让我感到很亲切。

    上午报告的主题是“Data Mining: Moving Towards the New Frontiers”。报告内容主要是他领导的研究小组完成的相关研究。刚开始,韩老师就向我们简述了一下DM的发展情况,还指出想要做好DM必须有Data Base, Machine Learning, Information Retrieval, Statistics的基础,这样才有可能在DM中作出东西出来。

    韩老师的报告内容就像一个DM的综述一样,首先从Data warehouse 中的Data Cube 开始,介绍了很多OLAP,Efficient Cubing, Indexing的技术。韩老师的介绍又一个特点,那就是每个相关的点都有至少一篇他们研究小组的论文列出。介绍过程中我非常感兴趣的有以下几点:

    1。Classification中比C45好的技术有很多,其中韩老师组里的研究成果CMAR 和CPAR都非常好。这些比C45好的技术对于我来说非常的有用。因为到目前为止我在分类问题上的理解大多还是停留在C45的水平上。曾经对C45有过深入的学习,现在整个思路和想法都觉得C45非常好,一直想跳出这种想法但是苦于没有找到可以拜读的论文。现在可以借助于阅读相关论文来完成这个工作。

    2。Data stream的Clustering中可以借助于Micro-clusters来完成最终的Clustering。这样可以克服大类中突现出来的小类的分离过程。

    3。Scalable Web and Text Mining中存在着大量的有很多正例儿反例非常少的情况。比如在分类Professors的主页时大家一般都不指着这个Professor的主页说这个不是另外一个Professor的主页。这种情形在我们的NLP中非常常见。比如我们做过的文本分类。以往的做法是随便将一个正例改为反例。这样一来确实可以得到很多的训练样本,但是这样得到的反例和正例之间的距离或者说相反的程度可能会很小。试想,如果我们把数据空间中相距很近的两堆相反样本区分开,这本身就是一件非常困难的事情。这里韩老师的方法我觉得很只得借鉴。那就是在正例样本空间中依靠一些特征来找出那些相差非常大的样本来构成负例。然后利用SVM来找到支持向量,然后在两组支持向量之间的空白部分再完成相似的工作,直到边界很小为止。这就像在北京地区先区分出紫禁城以内和五环以外,然后在分出四环和二环。这个方法我感觉非常好,但是有一点需要深究,那就是如何有效方便的找出那些相差比较大的反例。针对这个问题,在听众提问的时候我举手向韩老师请教了一下。答案是要针对具体类别寻找有效的特征。

    4。感到最新鲜的是韩老师介绍的程序自动探测BUG的工作。原先有人研究这个采用的方法是软件工程的角度。而他指导的一名学生采用的方法是DM。也就是将程序中的语句是不是BUG看成是一个分类问题。实验数据也很好获得。一般的想想这个问题非常的有意思,采用的解决思想就是分析大量的测试结果,找出那些程序运行过程中发生数据突变的那些部分,从而完成bug语句的定位。据说这个研究已经开始了很长时间。现在有专门的研究机构开展了这项研究。其实这个工作也是非常有意义的。因为这个一旦做好将会极大的推动软件行业的发展。这个例子也说明了实际生活中的一些问题可以换一个角度去看,那样往往会得到意想不到的方法和结果。

    5。韩老师在介绍每项研究成果或者说是研究论文的时候提到的都是一些非常有趣而简短的idea。这让我想到了作研究的一种模式。那就是彻底了解别人的工作,结合自己的情况想到一些改进的方案从而完成研究。一篇论文不需要太多的创新点,一个就行。加上充分的理论和实践的论证,那就是出色的研究。

    6。最后一个听众提问是询问大家一直可能都比较模糊的问题。那就是DM和ML的区别。韩老师回答时先是提到了一个以前他在欧洲出席一个国际会议时一位搞统计的研究人员询问他的问题。那位搞统计的说DM和Stat有什么重大区别么,研究的问题其实都是差不多的,统计专门的机构已经有上百年历史,DM只有三十年的历史;作统计的在研究分类部分已经有三十年的历史,而DM只有不到十年的历史。韩老师说这其中涉及到的DM、ML和Stat都是很相关的。首先DM是一个非常交叉的学科。需要学习很多的东西。但是本质上和ML以及Stat的区别就是DM遇到的问题是海量的数据,以往在ML和Stat好使的方法在DM就不一定好使。比如Decision Trees 和Cluster的研究。我想,其实在进行DM的相关研究时如果带着需要处理大量数据的“有色眼镜”来重新审视那些ML和Stat的方法往往获得到很多的研究内容,这其中蕴涵着大量的研究空间。


    韩老师的报告结束了,从中了解到了很多的东西。我想,对我来说现在需要学习的东西还有很多很多。虽然我的研究方向不是DM、ML或者Stat,但是我所学习的NLP也是多学科交叉的。其中需要掌握大量的知识。联想到昨日那位中年校友代表的“厚”。我需要好好的扎实的去学习这些东西。现在还是“儿童团”员的我需要更加努力的学习。

    [Collection]一生受用的五句话(转)

    第一句话是:优秀是一种习惯。

      这句话是古希腊哲学家亚里士多德说的。如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都是后天形成的,是家庭影响和教育的结果。所以,我们的一言一行都是日积月累养成的习惯。我们有的人形成了很好的习惯,有的人形成了很坏的习惯。所以我们从现在起就要把优秀变成一种习惯,使我们的优秀行为习以为常,变成我们的第二天性。让我们习惯性地去创造性思考,习惯性地去认真做事情,习惯性地对别人友好,习惯性地欣赏大自然。

    注解:要会"装",要持续的、不间断的"装",装久了就成了真的了,就成了习惯了,比如准时到会,每次都按时到会,你装装看,你装30年看看,装的时间长了就形成了习惯。:)

    第二句话是:生命是一种过程。

      事情的结果尽管重要,但是做事情的过程更加重要,因为结果好了我们会更加快乐,但过程使我们的生命充实。

      人的生命最后的结果一定是死亡,我们不能因此说我们的生命没有意义。世界上很少有永恒。大学生谈恋爱,每天都在信誓旦旦地说我会爱你一辈子,这实际上是不真实的。统计数据表明,大学生谈恋爱的100对里有90对最后会分手,最后结婚了的还有一半会离婚。你说爱情能永恒吗?所以最真实的说法是:"我今天,此时此刻正在真心地爱着你。"明天也许你会失恋,失恋后我们会体验到失恋的痛苦。这种体验也是丰富你生命的一个过程。

    注解:生命本身其实是没有任何意义的,只是你自己赋予你的生命一种你希望实现的意义,因此享受生命的过程就是一种意义所在。

    第三句话是:两点之间最短的距离并不一定是直线。

      在人与人的关系以及做事情的过程中,我们很难直截了当就把事情做好。我们有时需要等待,有时需要合作,有时需要技巧。我们做事情会碰到很多困难和障碍,有时候我们并不一定要硬挺、硬冲,我们可以选择有困难绕过去,有障碍绕过去,也许这样做事情更加顺利。大家想一想,我们和别人说话还得想想哪句话更好听呢。尤其在中国这个比较复杂的社会中,大家要学会想办法谅解别人,要让人觉得你这个人很成熟,很不错,你才能把事情做成。

    注解:如果你在考数学试题,一定要答两点之间直线段最短,如果你在走路,从A到B,明明可以直接过去,但所以人都不走,你最好别走,因为有陷阱。在中国办事情,直线性思维在很多地方要碰壁,这是中国特色的中国处事智慧。

    第四句话是:只有知道如何停止的人才知道如何加快速度。

      我在滑雪的时候,最大的体会就是停不下来。我刚开始学滑雪时没有请教练,看着别人滑雪,觉得很容易,不就是从山顶滑到山下吗?于是我穿上滑雪板,哧溜一下就滑下去了,结果我从山顶滑到山下,实际上是滚到山下,摔了很多个跟斗。我发现根本就不知道怎么停止、怎么保持平衡。最后我反复练习怎么在雪地上、斜坡上停下来。练了一个星期,我终于学会了在任何坡上停止、滑行、再停止。这个时候我就发现自己会滑雪了,就敢从山顶高速地往山坡下冲。因为我知道只要我想停,一转身就能停下来。只要你能停下来,你就不会撞上树、撞上石头、撞上人,你就不会被撞死。因此,只有知道如何停止的人,才知道如何高速前进。

    注解:用汽车来比喻,宝马可以上200公里,奇瑞却只能上120公里,为什么?发动机估计不相上下,差距在刹车系统,上了200公里刹不了车,呵呵,我的天!

    第五句话是:放弃是一种智慧,缺陷是一种恩惠。

      当你拥有六个苹果的时候,千万不要把它们都吃掉,因为你把六个苹果全都吃掉,你也只吃到了六个苹果,只吃到了一种味道,那就是苹果的味道。如果你把六个苹果中的五个拿出来给别人吃,尽管表面上你丢了五个苹果,但实际上你却得到了其他五个人的友情和好感。以后你还能得到更多,当别人有了别的水果的时候,也一定会和你分享,你会从这个人手里得到一个橘子,那个人手里得到一个梨,最后你可能就得到了六种不同的水果,六种不同的味道,六种不同的颜色,六个人的友谊。人一定要学会用你拥有的东西去换取对你来说更加重要和丰富的东西。所以说,放弃是一种智慧。

    注解:我的个人原则是:每一次放弃都必须是一次升华,否则就不要放弃;每一次选择都必须是一次升华,否则不要选择。缺点意味着我们可以进一步完美,有匮乏之处意味着我们可以进一步努力。美国有一部电视片,讲的是一位富翁给后代留下了用不尽的遗产,结果他的后代全都变成了吸毒的、自杀的、进监狱的,或者精神病患者。为什么会这样呢?因为这位富翁给自己后代留下的钱太多了,以致他们不需要劳动就可以继承一大笔财产。继承一大笔财富,就几乎什么都能买到。所以,当一个人什么都不缺的时候,他的生存空间就被剥夺掉了。如果我们每天早上醒过来,感到自己今天缺点儿什么,感到自己还需要更加完美,感到自己还有追求,那是一件多么值得高兴的事情啊!

    2005年6月5日

    哈工大85周年校庆

    参加大学校庆活动这还是第一次,回想自己2000年9月初到哈尔滨时还能在学校感受到一点点学校80周年校庆的余温。现在又是校庆,但是已经是85周年的了。哈哈,我已经在外求学五年了。真是不经意间得知这个结论。有一次感觉到了时间过得真快,五年竟也眨眼间过去。真是不敢想象再过五年我会是什么样子,会在哪里。呵呵,估计那时候正在准备博士毕业吧。

    还是转回话题吧。今日的校庆活动原先以为只是一些知名校友之间互相交流的一个机会,没想到会有这么多的老校友出席。据介绍,北京地区哈工大的校友目前共有一万名左右。今天到会的有260人左右。我坐在正对会议室主席台的后面几排。在我右侧的是一位很和蔼的老先生。和他寒暄几句后得知他曾经在我们计算机系工作了几十年。他就是李光汉老师。曾经是57级计算数学专业的学生,毕业后一直在哈工大计算机系任教。92年因为中国资源卫星的项目调到北京工作,现在已经退休。李老师还说他和王义和老师很熟。他还给我们徐院长讲过课。我向他介绍了一点计算机学院最新的情况。李老师非常的高兴。

    正式活动9:30开始。主持人介绍了到场的一些知名校友。坐在前台正中间的是我们的李昌老校长。李校长今年九十一岁,身体很硬朗,还亲自来参加这次校庆活动。会上还有很多人发言,无一例外,大家都诚挚的祝福李昌老校长能够健康长寿。李昌校长的也给大家讲了几句。其中提到了矛盾论和实践论的学习。他建议大家好好学习和体会这两个理论。

    今天受益最大的是几位校友代表的发言。校友代表有三位,分别代表青年、中年、老年。青年代表是北京青年校友会的会长,现年40岁现在在北京产权交易所工作,曾认学校的团支部书记。中年代表61岁,我认为他的讲话最为精彩。他的讲话重点解释了三个字:“尖”,“亮”,“厚”。“尖”是品牌,“亮”是特色,“厚”是基础。这三个字是办学校、开公司、做学问都适用的三个条件。其中最为重要的是“厚”。基础打牢了才能高楼平地起,反之基础不牢就大铺摊子,就像旗杆一样,一直拔下去迟早会倒掉。做学问更需要坚实的基础。一个问题一个问题的搞懂,一点一点的积累。最终厚积薄发,那样才能取得成功。

    会上有一位头发颁白的老校友非常激动的倒前台发言。他是今天刚从美国回来,他现在是美国一个大学的客座教授。回来参加这个校友会,非常希望能够降到自己的老朋友们。看到李昌校长在场,他非常的激动,亲切的称呼李昌校长为老师。

    看着台上台下的校友们,很多都是头发已经颁白的老者。他们的脸上都洋溢着笑容。是呀,他们都是我们哈工大的骄傲,正式他们当年的贡献和多年的支持,才会有我们的今天。会场的主持人说在场的除了老年人、中年人、青年人,还有一批儿童团。这个就是指我们这些毛头小子了。呵呵,一下子被归入儿童团还真有点新鲜的感觉。面对诸位老校友,我真的感觉到了自己很年轻。将来的路还有很长。试想几十年后我参加哈工大的校友会时可能就会有他们现在的幸福的感觉吧。

    在这里我诚挚的祝福我的母校-哈工大生日快乐,是她给了我书写人生的基础,是她给了我飞翔的力量。我永远都是哈工大人!

    2005年6月4日

    校庆活动通知

    今天加班完成DLL转交给际洲,完成全部测试后在这里听了一会儿Bandari。
    下午接到王震发过来的消息,说是哈哈工大北京校友会明天要举行85周年的校庆活动。王震邀请我们一起过去看看。得知时间地点后在网上查了半天才完全弄清楚了如何坐车过去。
    我把消息告诉世奇、承杰后他们也愿意去看看。但是我们还在读,按理说应该不算校友的,王震说应该能够去的。由于不能确定我们能不能去,找到给王震发邀请函的mail后我把情况说明了一下。
    等到我们离开实验室了,还是没有收到回复。我们三人决定只好明日去试试了,如果不让进我们就到那里附近的大观园去看看。

    2005年6月3日

    C#下DLL编程

    在实验室时尚林指点过我如何在VC环境下写DLL。今天需要将我已经写好的一个将XML库导入到SQL Server 2000中的类的接口转换为DLL提供给别人调用。

    还好在学习C#教程时看到过一点介绍。现在的C#编程大多都是依葫芦画瓢,学着别人的做法自己也将以前的类改装了一番,下面将一点点的心得整理一下:

    1.写好名称空间、类名、函数名。
    比如
    //FileName.cs
    namespace MyDll //名称空间
    {
      Public class MyClass //可以调用的类名
      {
        Public int MyFuntion(string strFileName) //public是可以外部调用的接口,可以有多个外部接口函数
        {
          ……
        }
        private int MyFunction2(int someinteger) //内部函数,不允许外部调用
        {
          ……
        }
      }
    }

    2.生成DLL
    打开Visual Studio .NET 2003 Command Prompt
    定位到FileName.cs的文件夹
    再键入命令csc /target:library /out:MyDll.dll FileName.cs
    注:这里的MyDll最好和程序中的名称空间一样
    运行指令即可生成MyDll.dll

    3.调用DLL
    程序开头部分需要写
    using MyDll; //表示引用动态链接库MyDll.dll
    程序中可以使用MyClass.MyFunction()
    即编写的动态链接库生成程序中的"类名.public函数名"。

    以上即是完成C#下创建DLL的简单流程介绍。和VC下的方法对比了一下,感觉一样方便,只是传参数时没有像VC下的不能传string的限制。

    2005年6月2日

    Ping Pong Club

    上午11点,四位组织者在Eileen的组织下讨论了Ping Pong Club的成立事宜。我们计划下周先组织一次在BUAA球馆的活动“测试”,等测试好了再大规模活动。初步定下的成员有十位之多。会后我在Yabin的指点下在Students Document的Club文件夹下新建了一个Ping Pong Club Contact的文件,发个mail给大家就开始等待大家的报名了。呵呵,到晚饭时分有好几位朋友都在上面报名了。

    成立计划中的内容是在下周活动,但是基于前几日大家乒乓的感觉,今晚大家忙完手头的工作后又到BUAA的球馆活动去了。陪朋友们买完球拍球鞋回来已是晚上8:30,大家来到球馆排队说是要等到9:00才能玩,无奈的二十分钟我们在球馆外面的空地上玩了一会儿乒乓接力的游戏,呵呵,有点像小朋友刚刚过去的儿童节^-^

    二十分钟刹眼过去,大家玩得非常高兴,看来大家都是童心未泯型的。接下来的两个小时大家开始混战。各种组合应有尽有,毕竟今晚我们是9人同时行动。打到最后剩下小崔,孙承杰,孙军和我。到了10:40我们实在打不动了。回到寝室抢在11:00停热水之前赶紧冲洗。

    今天的两个小时已经不像那日第一次打两小时般累了。看来锻炼还是有效果的:)

    2005年6月1日

    程序1.0通过

    来到这边开始了解项目的系统架构花了一些时间,接下来又是和际洲进行分工。上周才将我的任务完全明确下来。

    第一阶段我需要完成一个将XML文件加载到SQL Server 2000的程序。SQL Server 2000 我还是在本科时学习数据库的时候编在上面写过一下小小数据库生成和检索程序。现在想来当初认真完成的数据库课程设计是非常有益的,在这里复习了一天就想起来很多了,基本的一些编程涉及内容也都会了。接下来的C#编程,开始时我感到有些紧张,因为原先一直没有接触过这门编程语言。起初想到学习这门语言等以后回去了也用不上,也就在VB,VC中来回选择,后来在际洲帮助下开始学习C#。看了一套教程找来一本参考书竟也开始编程实现自己的导入工作起来。

    编程连接数据库,这还是我第一次正式编写这种程序。忙了几天后今天下午我的程序通过了我准备好的测试。哈哈,当时很兴奋!

    再修改了一下程序,准备明天连接到际洲的远程数据库上完成最后的测试。想来这部分工作之后就可以展开下一阶段的工作了。

    数日的忙碌总算有了点小小结果,高兴一下下^_^