in

SDT Community Server

SDT Forums, Blogs, Photos server.

Floating Heart

No description is bad.

July 2008 - Posts

  • Silverlight2相关文章汇总

    http://www.cnblogs.com/Terrylee/archive/2008/07/21/silverlight-2-articles.html

    概述

    对自己写的Silverlight 2的相关文章做一下汇总,便于大家直接查找。另外,大家如果有关于Silverlight 2方面的问题,也可以在这里提出,我将尽力为大家解答。

    一步一步学习Silverlight 2系列

    本系列基于Silverlight 2 Beta 1,主要介绍了Silverlight 2基础,网络与数据访问,图形图像处理、与浏览器的集成等几个方面:

    1.一步一步学Silverlight 2系列(1):创建一个基本的Silverlight应用

    2.一步一步学Silverlight 2系列(2):基本控件

    3.一步一步学Silverlight 2系列(3):界面布局

    4.一步一步学Silverlight 2系列(4):鼠标事件处理

    5.一步一步学Silverlight 2系列(5):实现简单的拖放功能

    6.一步一步学Silverlight 2系列(6):键盘事件处理

    7.一步一步学Silverlight 2系列(7):全屏模式支持

    8.一步一步学Silverlight 2系列(8):使用样式封装控件观感

    9.一步一步学Silverlight 2系列(9):使用控件模板

    10.一步一步学Silverlight 2系列(10):使用用户控件

    11.一步一步学Silverlight 2系列(11):数据绑定

    12.一步一步学Silverlight 2系列(12):数据与通信之WebClient

    13.一步一步学Silverlight 2系列(13):数据与通信之WebRequest

    14.一步一步学Silverlight 2系列(14):数据与通信之WCF

    15.一步一步学Silverlight 2系列(15):数据与通信之ASMX

    16.一步一步学Silverlight 2系列(16):数据与通信之JSON

    17.一步一步学Silverlight 2系列(17):数据与通信之ADO.NET Data Services

    18.一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

    19.一步一步学Silverlight 2系列(19):如何在Silverlight中与HTML DOM交互(上)

    20.一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)

    21.一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    22.一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码

    23.一步一步学Silverlight 2系列(23):Silverlight与HTML混合之无窗口模式

    24.一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法

    25.一步一步学Silverlight 2系列(25):综合实例之Live Search

    26.一步一步学Silverlight 2系列(26):基本图形

    27.一步一步学Silverlight 2系列(27):使用Brush进行填充

    28.一步一步学Silverlight 2系列(28):图片处理

    29.一步一步学Silverlight 2系列(29):使用Transform实现更炫的效果(上)

    30.一步一步学Silverlight 2系列(30):使用Transform实现更炫的效果(下)

    31.一步一步学Silverlight 2系列(31):图形图像综合实例—实现水中倒影效果

    32.一步一步学Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放

    33.一步一步学Silverlight 2系列(33):Silverlight 2应用Web Service两例

    34.一步一步学Silverlight 2系列(34):使用Silverlight Streaming托管Silverlight应用程序

    35.一步一步学Silverlight 2系列(35):升级Silverlight 2 Beta 1应用程序到Beta 2

    教程文章

    实际项目开发中遇到问题的解决,Silverlight 2中技术教程文章等,都是基于Silverlight 2 Beta 2。

    1.Silverlight 2中多语言支持实现(上)

    2.Silverlight 2中多语言支持实现(下)

    3.在Silverlight 2中实现超酷图表

    4.详解Silverlight 2中的独立存储(Isolated Storage)

    5.在Silverlight 2应用程序中集成Virtual Earth

    6.谈谈Silverlight 2中的视觉状态管理 Part1

    7.Silverlight 2应用程序中XAP文件揭秘

    8.Silverlight 2中实现Deep Zoom

    技巧诀窍

    本部分主要是Silverlight 2在使用过程中的一些小技巧,基于Silverlight 2 Beta 2。

    1.技巧:在Silverlight 2应用程序中切换用户控件

    2.技巧:Silverlight应用程序中如何获取ASP.NET页面参数

    3.技巧:在Silverlight中如何访问外部xap文件中UserControl

    其它相关

    与Silverlight 2相关的文章。

    1.非常精彩的Silverlight 2控件样式

    2.[推荐]Silverlight 2 开发者海报

    3.三套Silverlight 2 Beta 2的控件样式

     

    Posted Jul 31 2008, 03:26 PM by wicky with no comments
    Filed under:
  • 写出高质量软件的75条体会

    http://space.itpub.net/14710081/viewspace-412168

    如何用正确的方法写出高质量软件的75条体会
    1. 你们的项目组使用源代码管理工具了么?
    MVM:应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。
    2. 你们的项目组使用缺陷管理系统了么?
    MVM:应该用。ClearQuest太复杂,我的推荐是BugZilla。
    3. 你们的测试组还在用Word写测试用例么?
    MVM:不要用Word写测试用例(Test Case)。应该用一个专门的系统,可以是Test Manager,也可以是自己开发一个ASP.NET的小网站。主要目的是Track和Browse。
    4. 你们的项目组有没有建立一个门户网站?
    MVM:要有一个门户网站,用来放Contact Info、Baselined Schedule、News等等。推荐Sharepoint Portal Server 2003来实现,15分钟就搞定。买不起SPS 2003可以用WSS (Windows Sharepoint Service)。
    5. 你们的项目组用了你能买到最好的工具么?
    MVM:应该用尽量好的工具来工作。比如,应该用VS.NET而不是Notepad来写C#。用Notepad写程序多半只是一种炫耀。但也要考虑到经费,所以说是“你能买到最好的”。
    6. 你们的程序员工作在安静的环境里么?
    MVM:需要安静环境。这点极端重要,而且要保证每个人的空间大于一定面积。
    7. 你们的员工每个人都有一部电话么?
    MVM:需要每人一部电话。而且电话最好是带留言功能的。当然,上这么一套带留言电话系统开销不小。不过至少每人一部电话要有,千万别搞得经常有人站起来喊:“某某某电话”。《人件》里面就强烈谴责这种做法。
    8. 你们每个人都知道出了问题应该找谁么?
    MVM:应该知道。任何一个Feature至少都应该有一个Owner,当然,Owner可以继续Dispatch给其他人。
    9. 你遇到过有人说“我以为…”么?
    MVM:要消灭“我以为”。Never assume anything。
    10. 你们的项目组中所有的人都坐在一起么?
    MVM:需要。我反对Virtual Team,也反对Dev在美国、Test在中国这种开发方式。能坐在一起就最好坐在一起,好处多得不得了。
    11. 你们的进度表是否反映最新开发进展情况?
    MVM:应该反映。但是,应该用Baseline的方法来管理进度表:维护一份稳定的Schedule,再维护一份最新更改。Baseline的方法也应该用于其它的Spec。Baseline是变更管理里面的一个重要手段。
    12. 你们的工作量是先由每个人自己估算的么?
    MVM:应该让每个人自己估算。要从下而上估算工作量,而不是从上往下分派。除非有其他原因,比如政治任务工期固定等。
    13. 你们的开发人员从项目一开始就加班么?
    MVM:不要这样。不要一开始就搞疲劳战。从项目一开始就加班,只能说明项目进度不合理。当然,一些对日软件外包必须天天加班,那属于剥削的范畴。
    14. 你们的项目计划中Buffer Time是加在每个小任务后面的么?
    MVM:不要。Buffer Time加在每个小任务后面,很容易轻易的就被消耗掉。Buffer Time要整段的加在一个Milestone或者checkpoint前面。
    15. 值得再多花一些时间,从95%做到100%好
    MVM:值得,非常值得。尤其当项目后期人困马乏的时候,要坚持。这会给产品带来质的区别。
    16. 登记新缺陷时,是否写清了重现步骤?
    MVM:要。这属于Dev和Test之间的沟通手段。面对面沟通需要,详细填写Repro Steps也需要。
    17. 写新代码前会把已知缺陷解决么?
    MVM:要。每个人的缺陷不能超过10个或15个,否则必须先解决老的bug才能继续写新代码。
    18. 你们对缺陷的轻重缓急有事先的约定么?
    MVM:必须有定义。Severity要分1、2、3,约定好:蓝屏和Data Lost算Sev 1,Function Error算Sev 2,界面上的算Sev 3。但这种约定可以根据产品质量现状适当进行调整。
    19. 你们对意见不一的缺陷有三国会议么?
    MVM:必须要有。要有一个明确的决策过程。这类似于CCB (Change Control Board)的概念。
    20. 所有的缺陷都是由登记的人最后关闭的么?
    MVM:Bug应该由Opener关闭。Dev不能私自关闭Bug。
    21. 你们的程序员厌恶修改老的代码么?
    MVM:厌恶是正常的。解决方法是组织Code Review,单独留出时间来。XP也是一个方法。
    22. 你们项目组有Team Morale Activity么?
    MVM:每个月都要搞一次,吃饭、唱歌、Outing、打球、开卡丁车等等,一定要有。不要剩这些钱。
    23. 你们项目组有自己的Logo么?
    MVM:要有自己的Logo。至少应该有自己的Codename。
    24. 你们的员工有印有公司Logo的T-Shirt么?
    MVM:要有。能增强归属感。当然,T-Shirt要做的好看一些,最好用80支的棉来做。别没穿几次就破破烂烂的。
    25. 总经理至少每月参加次项目组会议
    MVM:要的。要让team member觉得高层关注这个项目。
    26. 你们是给每个Dev开一个分支么?
    MVM:反对。Branch的管理以及Merge的工作量太大,而且容易出错。
    27. 有人长期不Check-In代码么?
    MVM:不可以。对大部分项目来说,最多两三天就应该Check-In。
    28. 在Check-In代码时都填写注释了么?
    MVM:要写的,至少一两句话,比如“解决了Bug No.225”。如果往高处拔,这也算做“配置审计”的一部分。
    29. 有没有设定每天Check-In的最后期限?
    MVM:要的,要明确Check-In Deadline。否则会Build Break。
    30. 你们能把所有源码一下子编译成安装文件吗?
    MVM:要的。这是每日编译(Daily Build)的基础。而且必须要能够做成自动的。
    31. 你们的项目组做每日编译么?
    MVM:当然要做。有三样东西是软件项目/产品开发必备的:1. bug management; 2. source control; 3. daily build。
    32. 你们公司有没有积累一个项目风险列表?
    MVM:要。Risk Inventory。否则,下个项目开始的时候,又只能拍脑袋分析Risk了。
    33. 设计越简单越好
    MVM:越简单越好。设计时候多一句话,将来可能就带来无穷无尽的烦恼。应该从一开始就勇敢的砍。这叫scope management。
    34. 尽量利用现有的产品、技术、代码
    MVM:千万别什么东西都自己Coding。BizTalk和Sharepoint就是最好的例子,有这两个作为基础,可以把起点提高很多。或者可以尽量多用现成的Control之类的。或者尽量用XML,而不是自己去Parse一个文本文件;尽量用RegExp,而不是自己从头操作字符串,等等等等。这就是“软件复用”的体现。
    35. 你们会隔一段时间就停下来夯实代码么?
    MVM:要。最好一个月左右一次。传言去年年初Windows组在Stevb的命令下停过一个月增强安全。Btw,“夯”这个字念“hang”,第一声。
    36. 你们的项目组每个人都写Daily Report么?
    MVM:要写。五分钟就够了,写10句话左右,告诉自己小组的人今天我干了什么。一则为了沟通,二则鞭策自己(要是游手好闲一天,自己都会不好意思写的)。
    37. 你们的项目经理会发出Weekly Report么?
    MVM:要。也是为了沟通。内容包括目前进度,可能的风险,质量状况,各种工作的进展等。
    38. 你们项目组是否至少每周全体开会一次?
    MVM:要。一定要开会。程序员讨厌开会,但每个礼拜开会时间加起来至少应该有4小时。包括team meeting, spec review meeting, bug triage meeting。千万别大家闷头写code。
    39. 你们项目组的会议、讨论都有记录么?
    MVM:会前发meeting request和agenda,会中有人负责主持和记录,会后有人负责发meeting minutes,这都是effective meeting的要点。而且,每个会议都要形成agreements和action items。
    40. 其他部门知道你们项目组在干什么么?
    MVM:要发一些Newsflash给整个大组织。Show your team’s value。否则,当你坐在电梯里面,其他部门的人问:“你们在干嘛”,你回答“ABC项目”的时候,别人全然不知,那种感觉不太好。
    41. 通过Email进行所有正式沟通
    MVM:Email的好处是免得抵赖。但也要避免矫枉过正,最好的方法是先用电话和当面说,然后Email来确认。
    42. 为项目组建立多个Mailing Group
    MVM:如果在AD+Exchange里面,就建Distribution List。比如,我会建ABC Project Core Team,ABC Project Dev Team,ABC Project All Testers,ABC Project Extended Team等等。这样发起Email来方便,而且能让该收到email的人都收到、不该收到不被骚扰。
    43. 每个人都知道哪里可以找到全部的文档么?
    MVM:应该每个人都知道。这叫做知识管理(Knowledge Management)。最方便的就是把文档放在一个集中的File Share,更好的方法是用Sharepoint。
    44. 你做决定、做变化时,告诉大家原因了么?
    MVM:要告诉大家原因。Empower team member的手段之一是提供足够的information,这是MSF一开篇的几个原则之一。的确如此,tell me why是人之常情,tell me why了才能有understanding。中国人做事喜欢搞限制,限制信息,似乎能够看到某一份文件的人就是有身份的人。大错特错。权威、权力,不在于是不是能access information/data,而在于是不是掌握资源。
    45. Stay agile and expect change
    MVM:要这样。需求一定会变的,已经写好的代码一定会被要求修改的。做好心理准备,对change不要抗拒,而是expect change。
    46. 你们有没有专职的软件测试人员?
    MVM:要有专职测试。如果人手不够,可以peer test,交换了测试。千万别自己测试自己的。
    47. 你们的测试有一份总的计划来规定做什么和怎么做么?
    MVM:这就是Test Plan。要不要做性能测试?要不要做Usability测试?什么时候开始测试性能?测试通过的标准是什么?用什么手段,自动的还是手动的?这些问题需要用Test Plan来回答。
    48. 你是先写Test Case然后再测试的么?
    MVM:应该如此。应该先设计再编程、先test case再测试。当然,事情是灵活的。我有时候在做第一遍测试的同时补上test case。至于先test case再开发,我不喜欢,因为不习惯,太麻烦,至于别人推荐,那试试看也无妨。
    49. 你是否会为各种输入组合创建测试用例?
    MVM:不要,不要搞边界条件组合。当心组合爆炸。有很多test case工具能够自动生成各种边界条件的组合——但要想清楚,你是否有时间去运行那么多test case。
    50. 你们的程序员能看到测试用例么?
    MVM:要。让Dev看到Test Case吧。我们都是为了同一个目的走到一起来的:提高质量。
    51. 你们是否随便抓一些人来做易用性测试?
    MVM:要这么做。自己看自己写的程序界面,怎么看都是顺眼的。这叫做审美疲劳——臭的看久了也就不臭了,不方便的永久了也就习惯了。
    52. 你对自动测试的期望正确么?
    MVM:别期望太高。依我看,除了性能测试以外,还是暂时先忘掉“自动测试”吧,忘掉WinRunner和LoadRunner吧。对于国内的软件测试的现状来说,只能“矫枉必须过正”了。
    53. 你们的性能测试是等所有功能都开发完才做的么?
    MVM:不能这样。性能测试不能被归到所谓的“系统测试”阶段。早测早改正,早死早升天。
    54. 你注意到测试中的杀虫剂效应了么?
    MVM:虫子有抗药性,Bug也有。发现的新Bug越来越少是正常的。这时候,最好大家交换一下测试的area,或者用用看其他工具和手法,就又会发现一些新bug了。
    55. 你们项目组中有人能说出产品的当前整体质量情况么?
    MVM:要有。当老板问起这个产品目前质量如何,Test Lead/Manager应该负责回答。
    56. 你们有单元测试么?
    MVM:单元测试要有的。不过没有单元测试也不是不可以,我做过没有单元测试的项目,也做成功了——可能是侥幸,可能是大家都是熟手的关系。还是那句话,软件工程是非常实践、非常工程、非常灵活的一套方法,某些方法在某些情况下会比另一些方法好,反之亦然。
    57. 你们的程序员是写完代码就扔过墙的么
    MVM:大忌。写好一块程序以后,即便不做单元测试,也应该自己先跑一跑。虽然有了专门的测试人员,做开发的人也不可以一点测试都不做。微软还有Test Release Document的说法,程序太烂的话,测试有权踢回去。
    58. 你们的程序中所有的函数都有输入检查么?
    MVM:不要。虽然说做输入检查是write secure code的要点,但不要做太多的输入检查,有些内部函数之间的参数传递就不必检查输入了,省点功夫。同样的道理,未必要给所有的函数都写注释。写一部分主要的就够了。
    59. 产品有统一的错误处理机制和报错界面么?
    MVM:要有。最好能有统一的error message,然后每个error message都带一个error number。这样,用户可以自己根据error number到user manual里面去看看错误的具体描述和可能原因,就像SQL Server的错误那样。同样,ASP.NET也要有统一的Exception处理。可以参考有关的Application Block。
    60. 你们有统一的代码书写规范么?
    MVM:要有。Code Convention很多,搞一份来发给大家就可以了。当然,要是有FxCop这种工具来检查代码就更好了。
    61. 你们的每个人都了解项目的商业意义么?
    MVM:要。这是Vision的意思。别把项目只当成工作。有时候要想着自己是在为中国某某行业的信息化作先驱者,或者时不时的告诉team member,这个项目能够为某某某国家部门每年节省多少多少百万的纳税人的钱,这样就有动力了。平凡的事情也是可以有个崇高的目标的。
    62. 产品各部分的界面和操作习惯一致么?
    MVM:要这样。要让用户觉得整个程序好像是一个人写出来的那样。
    63. 有可以作为宣传亮点的Cool Feature么?
    MVM:要。这是增强团队凝聚力、信心的。而且,“一俊遮百丑”,有亮点就可以掩盖一些问题。这样,对于客户来说,会感觉产品从质量角度来说还是acceptable的。或者说,cool feature或者说亮点可以作为质量问题的一个事后弥补措施。
    64. 尽可能缩短产品的启动时间
    MVM:要这样。软件启动时间(Start-Up time)是客户对性能好坏的第一印象。
    65. 不要过于注重内在品质而忽视了第一眼的外在印象
    MVM:程序员容易犯这个错误:太看重性能、稳定性、存储效率,但忽视了外在感受。而高层经理、客户正相反。这两方面要兼顾,协调这些是PM的工作。
    66. 你们根据详细产品功能说明书做开发么?
    MVM:要这样。要有设计才能开发,这是必须的。设计文档,应该说清楚这个产品会怎么运行,应该采取一些讲故事的方法。设计的时候千万别钻细节,别钻到数据库、代码等具体实现里面去,那些是后面的事情,一步步来不能着急。
    67. 开始开发和测试之前每个人都仔细审阅功能设计么?
    MVM:要做。Function Spec review是用来统一思想的。而且,review过以后形成了一致意见,将来再也没有人可以说“你看,当初我就是反对这么设计的,现在吃苦头了吧”
    68. 所有人都始终想着The Whole Image么?
    MVM:要这样。项目里面每个人虽然都只是在制造一片叶子,但每个人都应该知道自己在制造的那片叶子所在的树是怎么样子的。我反对软件蓝领,反对过分的把软件制造看成流水线、车间。参见第61条。
    69. Dev工作的划分是单纯纵向或横向的么?
    MVM:不能单纯的根据功能模块分,或者单纯根据表现层、中间层、数据库层分。我推荐这么做:首先根据功能模块分,然后每个“层”都有一个Owner来Review所有人的设计和代码,保证consistency。
    70. 你们的程序员写程序设计说明文档么?
    MVM:要。不过我听说微软的程序员1999年以前也不写。所以说,写不写也不是绝对的,偷懒有时候也是可以的。参见第56条。
    71. 你在招人面试时让他写一段程序么?
    MVM:要的。我最喜欢让人做字符串和链表一类的题目。这种题目有很多循环、判断、指针、递归等,既不偏向过于考算法,也不偏向过于考特定的API。
    72. 你们有没有技术交流讲座?
    MVM:要的。每一两个礼拜搞一次内部的Tech Talk或者Chalk Talk吧。让组员之间分享技术心得,这笔花钱送到外面去培训划算。
    73. 你们的程序员都能专注于一件事情么?
    MVM:要让程序员专注一件事。例如说,一个部门有两个项目和10个人,一种方法是让10个人同时参加两个项目,每个项目上每个人都花50%时间;另一种方法是5个人去项目A,5个人去项目B,每个人都100%在某一个项目上。我一定选后面一种。这个道理很多人都懂,但很多领导实践起来就把属下当成可以任意拆分的资源了。
    74. 你们的程序员会夸大完成某项工作所需要的时间么?
    MVM:会的,这是常见的,尤其会在项目后期夸大做某个change所需要的时间,以次来抵制change。解决的方法是坐下来慢慢磨,磨掉程序员的逆反心理,一起分析,并把估算时间的颗粒度变小。
    75. 尽量不要用Virtual Heads
    MVM:最好不要用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的。

    Posted Jul 31 2008, 03:21 PM by wicky with 3 comment(s)
    Filed under:
  • VS2008 Hang When Editing aspx/ascx page

    近几天几个同事发现VS2008在编辑aspx/ascx页面的时候无故死机,但是最新补丁已经安装过了。查看进程发现每次都有个奇怪的setup.exe在运行。暂时无法确认是否是安装了某些更新导致的。
    通常是C:\Program Files\Common Files\Microsoft Shared\OFFICE12\Office Setup Controller\setup.exe。

    临时解决办法:
    1) 关闭所有VS, 运行上述setup.exe
    2) 选择Microsoft Visual Studio Web Authoring Component
    3) 选择Repair
    4) 下一步直到完成
    5) 如果仍然出现VS没反应现象,将setup.exe改名。

    之后观察一段时间,问题解决。

     

    Posted Jul 29 2008, 09:00 AM by wicky with no comments
    Filed under:
  • Internet Explorer 6 may unexpectedly exit when you view a Web page that sets a scroll bar style attribute for an element

    http://support.microsoft.com/kb/918967/en-us

    SYMPTOMS

    loadTOCNode(1, 'symptoms');
    Consider the following scenario. You create an HTML page. The HTML page sets one or more of the following scroll bar style attributes for an element:
    scrollbar-3dlight-color
    scrollbar-arrow-color
    scrollbar-base-color
    scrollbar-darkshadow-color
    scrollbar-face-color
    scrollbar-highlight-color
    scrollbar-shadow-color
    scrollbar-track-color
    In this scenario, when you view the HTML page, Microsoft Internet Explorer 6 may unexpectedly exit (crash). Additionally, you may receive an error message that resembles the following:
    Internet Explorer has encountered a problem and needs to close.
    Note This problem only occurs on Windows XP Service Pack 2 (SP2)-based computers.

    Back to the top

    RESOLUTION

    loadTOCNode(1, 'resolution');

    Hotfix information

    loadTOCNode(2, 'resolution'); A supported hotfix is available from Microsoft. However, this hotfix is intended to correct only the problem that is described in this article. Apply this hotfix only to systems that are experiencing this specific problem. This hotfix might receive additional testing. Therefore, if you are not severely affected by this problem, we recommend that you wait for the next software update that contains this hotfix.

    If the hotfix is available for download, there is a "Hotfix download available" section at the top of this Knowledge Base article. If this section does not appear, contact Microsoft Customer Service and Support to obtain the hotfix.

    Note If additional issues occur or if any troubleshooting is required, you might have to create a separate service request. The usual support costs will apply to additional support questions and issues that do not qualify for this specific hotfix. For a complete list of Microsoft Customer Service and Support telephone numbers or to create a separate service request, visit the following Microsoft Web site:
    http://support.microsoft.com/contactus/?ws=support (http://support.microsoft.com/contactus/?ws=support)
    Note The "Hotfix download available" form displays the languages for which the hotfix is available. If you do not see your language, it is because a hotfix is not available for that language.

    Prerequisites

    loadTOCNode(3, 'resolution'); You must have Windows XP Service Pack 2 (SP2) installed to apply this hotfix.

    Restart requirement

    loadTOCNode(3, 'resolution'); You must restart the computer after you apply this hotfix.

    File information

    loadTOCNode(3, 'resolution'); The English version of this hotfix has the file attributes (or later file attributes) that are listed in the following table. The dates and times for these files are listed in Coordinated Universal Time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time item in Control Panel.
    File name File version File size Date Time Platform
    Mshtml.dll 6.0.2900.2910 3,055,104 17-May-2006 10:51 x86

    Back to the top

    WORKAROUND

    loadTOCNode(1, 'workaround');
    To work around this problem, remove the scroll bar style attributes from the HTML page.

    Back to the top

    STATUS

    loadTOCNode(1, 'status');
    Microsoft has confirmed that this is a bug in the Microsoft products that are listed in the "Applies to" section.

    Back to the top

    MORE INFORMATION

    loadTOCNode(1, 'moreinformation');
    For more information, click the following article number to view the article in the Microsoft Knowledge Base:
    824684 (http://support.microsoft.com/kb/824684/) Description of the standard terminology that is used to describe Microsoft software updates

    Back to the top

    REFERENCES

    loadTOCNode(1, 'references');
    For more information about the scroll bar style attributes in Internet Explorer, visit the following Microsoft Developer Network (MSDN) Web site:
    http://msdn2.microsoft.com/en-us/library/ms533055.aspx (http://msdn2.microsoft.com/en-us/library/ms533055.aspx)

    Back to the top


    APPLIES TO
    Microsoft Windows XP Service Pack 2

    Back to the top

    Posted Jul 26 2008, 09:44 PM by wicky with no comments
    Filed under: ,
  • 教育软件: 开源的课程管理系统Moodle

    http://quickbest.com.cn/discuz/thread-30721-1-1.html

    教育软件: 开源的课程管理系统Moodle

    google关键字:Moodle 简介
    来源:点击进入
    2006-11-13 22:38

    一、Moodle 简介:

       Moodle 这个词本是 Modular Object-Oriented Dynamic Learning Environment(模块化面向对象的动态学习环境)的缩写,程序员和教育理论家经常使用它。它也是一个动词,表述的是一个这样的过程:遇事不慌不忙,想起什么就做什么,快乐的瞎忙活可也经常会带来一些领悟和创新。Moodle 的开发就是这样,学生与教师在在线课程中学习与教课也是这样。使用 Moodle 的人被称为 Moodler。

    hat  Moodle是一个课程管理系统(CMS)--一套运用“声音教学原理”设计开发的开放源代码的软件,可以帮助教育者建立有效的在线学习社区。你可下载并安装于你的服务器,建立从一名教师的站点到40,000名学生的大学。

      开发背景:

      Moodle是一个还在不断发展的活跃项目。Martin Dougiamas发起了这个项目,并且继续领导着它:

    我一直以各种方式在为它做着什么,已经持续若干年了。它开始于90年代,那时我是Curtin University of Technology的网站管理员,同时也是那里使用的WebCT系统的管理员。WebCT这个怪兽给我带来了很多麻烦,使我有一种抓狂的感觉——一定要有更好的解决方案 (不,Blackboard不行 :-)

    我也知道学校和研究院(包括大型研究院)里有很多人想更好地应用Internet,但是面对眼花缭乱的技术和教学法,感到无从着手。我一直梦想可以有一个免费的软件,让这样的人能够把他们的教学能力发挥到网络上。

    对Internet 教育的强烈信仰促使我运用我在计算机科学方面的职业经验,结合新掌握的关于学习和协作的原理,攻读了教育学的硕士学位和博士学位。尤其是,我被社会建构主义的认识论深深影响。它不仅把学习看做一个社会活动,更关注在积极地为他人创造学习资源(例如课本)的过程中所产生的学习效果。

    我认为这个软件的易用性是最重要的。实际上,它应该尽可能的直观。

    我承诺继续为Moodle工作,并保持它的开放和免费。我一直深深地信奉无限教育(Unrestricted Education)和使能教学(Empowered Teaching)。Moodle是我可以为之贡献,从而实现我的理想的主要方式。

      开发和放弃了许多早期的原型之后,2002年8月20日,他面对着一个充满怀疑的世界,发布了1.0版本。这个版本的定位是服务于大学里的更小、更紧密的班级。它做为一个实例研究的目标,用来严密分析小型成年团队内发生的协作和反馈的本质。

      从那时起,一系列的新版本平稳发布,新的特性被加入进来,系统更加可靠,性能也获得提升。

      随着Moodle的推广和社区的扩大,更多的人为它注入了更多元素,他们来自不同教育机构。例如,Moodle现在不仅在大学被使用,在中学、小学、非盈利性组织和私人公司也被使用,还被自由教师,甚至孩子的父母使用。来自全世界的源源不断的人正在以各种方式为Moodle做贡献,详细情况请看致谢页面。

      Moodle项目的一个重要特色是moodle.org网站。它为各种Moodle的用户(包括系统管理员、教师、研究者和教导员,当然也包括开发者)提供了一个发布信息、讨论和协作的中心。就像Moodle一样,这个网站总随着社区的需要而进化,并且也像Moodle一样永远免费。

      开发理念:

    Moodle 的设计与开发遵从一种您可能听过的特别的教育理念、思想形态,简单地说就是“社会建构主义教育学(Social Constructionist Pedagogy)”。(读到这里,有些科学工作者可能已经在想:“故弄玄虚的胡言乱语”,并且准备移动鼠标,但请继续阅读下去——这对每个学科领域都很有用!)

    本页尝试用简单的术语,通过分解出其中的四个主要概念,来解释这个名词的含义。需要说明一下,这四个概念只是是对大量不同研究成果的片面总结,因此如果您对此领域有所了解,会觉得这里给出的定义并不全面。

    如果这些概念对您而言是全新的,那么刚开始会遇到一些理解上的困难——我的建议是仔细阅读,同时结合自己的经历,来尝试学到一些新东西。

    1. 构成主义(Constructivism)

    此观点主张,人在与所处环境相互影响的同时,应该积极地构造新知识。

    您使用已经具备的知识来检验您读、看、听、感受和触摸到的每件事物。如果一件事物被您的精神世界判断为可行,就可能形成伴随您的新知识。如果您在您的广阔天地里成功应用知识,它就会得到巩固。您不是一个存储器被动地接受信息,知识也不可能只通过阅读与听讲就“传递”给您。

    这并不是说您通过浏览网页和聆听讲座什么也学不到。显然,您能学到。这个观点只是指出,相对把信息从一个大脑传递到另一个大脑而言,还有更多的诠释的必要。

    2. 建构主义(Constructionism)

    建构主义断言,当为其他人创造一些事物去体验的时候,学习的效果将显著提高。可创造的事物多种多样,从一句话或一篇网上帖子,到更复杂的一幅画、一栋房屋或一个软件包都可以。

    例如,您可能阅读此页很多次但明天依然会忘记,可是如果曾试图用自己的话向其他人解释这些观点,或者制作一个幻灯片来阐明这些概念,那么我可以保证您一定获得更深入的理解,并且它与您自己的观点一定更好地融合在一起。这就是为什么尽管人们从来不看自己的笔记,但在听讲的时候还要做笔记。

    3. 社会构成主义(Social Constructivism)

    此主义把上述的观点扩展到一个社群,该社群成员为彼此创造事物,为一个共同的目标,协力建立一个共享成果的文化圈。当一个人融入这样的一个文化氛围时,他将自始至终学习如何在各个层面成为这个文化的一部分。

    一个非常简单的例子是像茶杯一样的一个物体。这个物体可以被用来做很多事情,但是它的形状却明确说明了某种“知识”——盛装液体。一个更复杂的例子是一个在线课程,不仅软件工具的“形”表明了在线课程的某种工作方式,社群创造的活动和文字作为一个整体也对社群中每个人的行为起到了一定的引导作用。

    4. 连接和分割(Connected and Separate)

    这个观点深入探求了个体参与讨论的动机。分割行为是当某人力图保持“客观”和“实际”,但倾向于为自己的观点辩护时,通过逻辑分析来寻找对手观点中的漏洞。连接行为是一种更合情理的方式,它认可主观的观点,试图通过努力地听和提问来理解他人的观点。 建构行为是指一个人敏锐地洞察这两种方式,并且能够根据当前情况从中找出最佳选择。

    一般而言,在一个学习团体中,合理数量的连接行为是对学习非常有力的刺激。它不仅把人们拉得更近,而且促进他们对所持观点的更深入的反省和检查。


    如果您在考虑所有的这些问题,经验表明,从学生的观点中学习是最好的,远比发布和评估您认为他们应该知道的信息有效得多。它可以帮助您认识到课程中的每个人不仅是学生,也是老师。做为“教师”,您的工作可以从“知识源”转变为班级文化的影响者和行为榜样;以个人方式和学生连在一起,引导他们的学习需求;通过适度的讨论和活动带领全体学生达到班级的学习目标。

    显然,Moodle 并没有强迫行为风格,这正是它的支持能力的体现。将来,随着 Moodle 技术架构的稳定,更多关于教学法支持的改进将是 Moodle 开发的主要方向。

    特性:

    Moodle是一个正在快速发展的产品。此页只列出了它众多特性中的一部份:

    整体设计

    • 推广社会建构主义教育学(协作、活动、互相批评讨论等)
    • 适合于100%在线的课程,也可以作为传统课程的补充
    • 简单、精巧、高效、兼容,易用的界面
    • 可以几乎在任何支持PHP的平台上安装,安装过程简单。只需要一个数据库(并且可以共享)
    • 全面的数据库抽象层,几乎支持所有的主流数据库(除了初始表定义)
    • 课程列表显示了服务器上每门课程的描述,包括是否允许访客使用
    • 可以对课程分类和搜索——一个Moodle网站可以支持成千上万门课程
    • 全面注重安全。所有的表单都被检查,数据被校验,cookie被加密……
    • 绝大部分的文本(资源、论坛帖子等)可以用所见即所得的编辑器编辑

    网站管理

    • 网站由admin用户管理,在安装过程中定义
    • “主题”插件允许管理员根据需要自定义网站的颜色、字体、字库和布局等
    • 活动模块插件可以随时被添加到已经安装的Moodle中
    • 语言包插件允许本地化到任何语言。可以使用内嵌的web编辑器编辑。目前已经有超过43种语言的语言包
    • 代码用PHP语言清晰地编写,采用GPL协议,可以按照您的要求轻松修改

    用户管理

    • 目标是保持安全的前提下,尽量降低管理员的工作量
    • 通过认证模块插件,支持多种认证机制,可以方便地与现有系统集成
    • 标准email认证:学生可以自己建立登陆帐号。对Email地址进行确认检查
    • LDAP认证:通过LDAP服务器对用户的登陆进行认证。管理员可以指定使用那些字段
    • IMAP、POP3、NNTP:通过邮件或新闻服务器对用户的登陆进行认证。支持SSL、证书和TLS
    • 外部数据库:任何有至少两个字段的数据库都可以用作外部认证源
    • 每人只需要一个帐号就可以访问整台服务器——每个帐号可以有不同的权限
    • 管理员帐号控制课程的建立,并且任命普通用户为教师
    • 课程管理员只允许建立课程,并在自己建立的课程里任教
    • 可以去掉教师(比如兼职的助教)的编辑权限,这样他们就不能修改课程了
    • 安全——教师可以给课程增加“选课密钥”,使不属于该课程的学生不能进入。可以以面对面或者email等方式告诉学生密钥
    • 教师可以根据需要手工添加学生到课程中来
    • 教师可以根据需要手工注销学生,否则他们在一段时间(由网站管理员设置)不活动后会被自动注销
    • 鼓励学生建立个人档案,包括照片和个人描述。如果需要,email地址可以不显示
    • 每个用户可以设定自己的时区,并且Moodle里的每个日期都被自动转换到该时区(例如发帖日期、作业截止日期等)
    • 每个用户可以选择Moodle的界面语言(英语、法语、德语、西班牙语、葡萄牙语等)

    课程管理

    • 全职教师可以全面控制课程的所有设置,包括限制其它教师
    • 可以选择课程的格式为星期、主题或社区讨论
    • 灵活的课程活动配置——论坛、测验、资源、投票、问卷调查、作业、聊天、专题讨论
    • 课程自上次登陆以来的变化可以显示在课程主页上——便于成员了解当前动态
    • 绝大部分的文本(资源、论坛帖子等)可以用所见即所得的编辑器编辑
    • 所有在论坛、测验和作业评定的分数都可以在同一页面查看(并且可以下载为电子表格文件)
    • 全面的用户日志和跟踪——在同一页面内统计每个学生的活动,显示图形报告,包括每个模块的细节(最后访问时间、阅读次数),还有参与的讨论等,汇编为每个学生的详细的“故事”。
    • 邮件集成——把讨论区帖子和教师反馈等以HTML或纯文本格式的邮件发送。
    • 自定义评分等级——教师可以定义自己的评分等级,并用来在论坛和作业打分
    • 使用备份功能可以把课程打包为一个zip文件。此文件可以在任何Moodle服务器恢复。

    作业模块

    • 可以指定作业的截止日期和最高分。
    • 学生可以上传作业(文件格式不限)到服务器——上传时间也被记录。
    • 也可以允许迟交作业,但教师可以清晰地看到迟交了多久
    • 可以在一个页面、一个表单内为整个班级的每份作业评分(打分和评价)。
    • 教师的反馈会显示在每个学生的作业页面,并且有email通知。
    • 教师可以选择打分后是否可以重新提交作业,以便重新打分

      聊天模块

      • 支持平滑的、同步的文本交互
      • 聊天窗口里包含个人图片
      • 支持URL、笑脸、嵌入HTML和图片等
      • 所有的谈话都记录下来供日后查看,并且也可以允许学生查看

      投票模块

      • 有点像选举投票。可以用来为某件事表决,或从每名学生得到反馈(例如支持率调查)
      • 教师可以在直观的表格里看到谁选择了什么
      • 可以选择是否允许学生看到更新的结果图

      论坛模块

      • 有多种类型的论坛供选择,例如教师专用、课程新闻、全面开放和每用户一话题。
      • 每个帖子都带有作者的照片。
      • 可以以嵌套、列表和树状方式浏览话题,也可以让旧贴在前或新贴在前。
      • 每个人都可以订阅指定论坛,这样帖子会以email方式发送。教师也可以强迫每人订阅
      • 教师可以设定论坛为不可回复(例如只用来发公告的论坛)
      • 教师可以轻松地在论坛间移动话题
      • 图片附件内嵌显示
      • 如果论坛允许评级,那么可以限制有效时间段

      测验模块

      • 教师可以定义题库,在不同的测验里复用
      • 题目可以分门别类地保存,易于使用,并且可以“公布”这些分类,供同一网站的其它课程使用。
      • 题目自动评分,并且如果题目更改,可以重新评分
      • 可以为测验指定开放时间
      • 根据教师的设置,测验可以被尝试多次,并能显示反馈和/或正确答案
      • 题目和答案可以乱序(随机)显示,减少作弊
      • 题目可以包含HTML和图片
      • 题目可以从外部文本文件倒入
      • Quizzes can be attempted multiple times, if desired
      • 如果愿意,可以分多次完成试答,每次的结果被自动累积。
      • 选择题支持一个或多个答案
      • 填空题(词或短语)
      • 判断题
      • 匹配题
      • 随机题
      • 计算题(带数值允许范围)
      • 嵌入答案题(完型填空风格),在题目描述中填写答案
      • 嵌入图片和文字描述

      资源模块

      • 支持显示任何电子文档、Word、Powerpoint、Flash、视频和声音等
      • 可以上传文件并在服务器进行管理,或者使用web表单动态建立(文本或HTML)
      • 可以连接到Web上的外部资源,也可以无缝地将其包含到课程界面里。
      • 可以用链接将数据传递给外部的web应用

      问卷调查模块

      • 内置的问卷调查(COLLES、ATTLS)作为分析在线课程的工具已经被证明有效
      • 随时可以查看在线问卷的报告,包括很多图形。数据可以以Excel电子表格或CSV文本文件的格式下载。
      • 问卷界面防止未完成的调查。
      • 学生的回答和班级的平均情况相比较,作为反馈提供给学生

      专题讨论

      • 学生对给定的文档进行公平的评价,教师对评价进行管理并打分。
      • 支持各种可用的评分级别
      • 教师可以提供示例文档供学生练习打分
      • 有很多非常灵活的选项。

    二、Moodle 社区:

      Moodle拥有一个巨大的、各式各样的用户社区,超过75,000注册用户,138个国家,70种语言。使用Moodle最适合建立一个重要的国际学术研讨会,主要使用英语,但其他各种团体使用不同的语言讨论其他主题。

     

  • Centre for Learning & Performance Technologies

    http://c4lpt.co.uk/Directory/

    This Directory contains over 2,400 tools for learning in two main sections:

    1. for creating, delivering and managing learning and performance support solutions
    2. for managing your own learning and productivity, for sharing resources, as well as group collaboration (also includes some enterprise tools)

    The tools in this Directory are both freeware/open source and commercial.

  • WCF从理论到实践系列

    http://www.kuqin.com/dotnet/20080418/6952.html

    WCF从理论到实践(1):揭开神秘面纱     

    摘要:通过阅读本文,能解决以下几个问题
    1. WCF是什么?
    2. WCF能干什么?
    3. WCF的今生前世?
    4. 学习WCF有哪些资源?

    WCF从理论到实践(2):决战紫禁之巅

    摘要:通过阅读本文,能解决如下问题:
    1) WCF与以往的分布式技术有何区别?
    2) WCF 在安全性方面做了哪些改进?
    3) WCF在性能方面有那些改进?
    4) WCF开发模型和以往的其他分布式技术有何区别?

    WCF从理论到实践(3):八号当铺之黑色契约     

    摘要:通过阅读本文,能解决以下的问题
    1)什么是契约?
    2)契约有几种?,他们都有什么用途
    3)如何定义契约?
    4)契约是独立于平台的么?
    5)契约和以往哪种技术比较相像,又有什么不同?

    WCF从理论到实践(4):路在何方     

    摘要:通过阅读本文,您能了解以下知识:
    1) Address是什么?
    2) Address的组成?
    3) 如何在配置文件中指定Address?
    4) 如何通过编程方式设置Address?
    5) Address有什么特殊应用?

    WCF从理论到实践(5):Binding细解     

    摘要:通过阅读本文,您能了解以下知识:
    1)WCF中的Binding是什么?
    2)Binding的组成?
    3)Binding Element 的分类?
    4)Binding描述了哪些层面的信息?
    5)如何选择正确的Binding

    WCF从理论到实践(6):WCF架构     

    摘要:过阅读本文,能使您获得以下知识:
    1)WCF的架构图
    2)WCF架构的关键元素及其概念
    3)创建一示例程序,并对其按架构图进行解析

    WCF从理论到实践(7):消息交换模式     

    摘要:通过阅读本文,您能理解以下知识:
    1) WCF定义了哪几种消息交换模式?
    2) One-Way Calls
    3) Request/Reply
    4) Duplex
    5) 用示例来解析WCF的消息交换模式

    WCF从理论到实践(8):事件广播     

     摘要:通过阅读本文,您能理解以下知识:
    1)如何实现一个基于duplex的事件广播
    2)解析在实现duplex事件广播中的几个问题
    3)初步探讨一下异步

    WCF从理论到实践(9):实例模式和对象生命周期     

    摘要:通过阅读本文,您可以了解以下知识:
    1) WCF中有哪几种对象实例模式?
    2) 几种实例模式下对象的生命周期?
    3) 各种实例模式的应用场合?
    4) 使用不同的实例模式,需要注意的有哪些?
    5) 代码不骗人,用一个小范例来看看不同实例模式的区别?

    WCF从理论到实践(10):异常处理     

     摘要:通过阅读本文,您能理解以下的知识
    1) WCF中存在哪几种异常处理方式?
    2) 各种异常处理所适用的应用场合?
    3) WCF中常见的异常类型?
    4) 代码不骗人,用示例来演示效果,加深印象

    WCF从理论到实践(11)-异步     

    摘要:通过阅读本文,您能了解以下知识
    1) 如何在WCF中实现异步
    2) 异步操作的优缺点及其应用场合
    3) 总结对比各种异步操作的实现方式
    4) 代码不骗人,实现一个WCF异步小范例

    WCF从理论到实践(12):事务     

    摘要:通过阅读本文,您能了解以下知识
    1) 如何在WCF中实现事务?
    2) 谈谈事务隔离方式的相关知识
    3) 事务的实现会给我们编程带来什么样的阻力?
    4) 一笔带过,WCF是如何实现分布式事务的?
    5) 代码不骗人,用一个银行存取款的范例来演练WCF事务

    WCF从理论到实践(13):事务投票     

    摘要:上文中我们欠缺了一个最重要的功能:事务投票,所谓事务投票就是一种灵活控制事务提交的方式,有时我们希望当操作中只有某个数据满足具体条件的时候,才能赞同事务提交,这样上文的实现明显就不满足需求了,此时我们可以用OperationContext.Current.SetTransactionComplete();显示的进行投票。注意,WCF的事务必须在全票通过的时候才能得以提交。本文还是结合银行的例子 来演示一下事务投票,并且搭配一个漂亮的WPF客户端,可谓买一送一了,:)。

    WCF从理论到实践(14):WCF解决方案模板     

    摘要:正所谓磨刀不误砍柴工,虽然VS2008为我们提供了WCFServiceLibrary项目模板,但在实际开发的时候,我们通常更喜欢按照自己的方式来建立WCF项目,通常情况下,我们将服务契约(通常是接口)数据契约,消息契约等契约单独作为一个项目,而将服务的实现作为另外一个项目,除此之外,还包括WCF服务的宿主程序,服务代理项目,客户端程序.我按照这种方式,作了一个WCF解决方案的通用模板

    WCF从理论到实践(15):响应变化     

    摘要:需求变化是软件开发过程中的一大难题,我们经常扼腕叹息:面对变化,我们的软件为何如此不堪一击?我们常常在众多需求变化导致的功能爆炸中疲于奔命,甚至迷失自我!这到底为什么?面对"拥抱变化"这种得呐喊,我们的感受应该是震耳欲聋,还是振聋发聩?如果你仍在困惑,可以来看一看WCF是如何摆脱这种困境的!

    WCF从理论到实践(16):操作重载(带视频+ppt+源码)

    摘要:阅读本文,您能了解以下知识

    1) 什么是操作重载?操作重载有什么好处
    2) WCF的服务端如何解决操作重载的问题?
    3) WCF的客户端如何解决操作重载问题?
    4) 小结

  • XPO 使用记录

    XPO 使用记录
    http://www.rainsts.net/article.asp?id=50

    1. 一般实体类直接继承自 XPObject,如果需要自定义主键或自增字段则可继承自XPCustomObject。

    2. 继承自XPBaseObject的实体类,Delete后将被直接物理删除。而XPCustomObject & XPObject的继承类则是软删除。
      (1) 实体对象软删除
      customer.Delete();
      customer.Save();
      
      (2) 物理删除
      Session.DefaultSession.PurgeObject(customer);
      
      (3) 物理删除所有被标记软删除的记录。
      Session.DefaultSession.PurgeDeletedObjects();
      
      (4) 清除数据库中所有数据。
      Session.DefaultSession.ClearDatabase();
      
      (5) 恢复被软删除的记录。
      while(true)
      {
        o = (MyObject)Session.DefaultSession.FindObject(typeof(MyObject), new NotOperator(new NullOperator("GCRecord")), true);
        if (o == null)
        {
          break;
        }
        o.GCRecord = null;
        o.Save();
      }  
      
      (6) 批量删除

      XPCollection customers = new XPCollection(typeof(Product), new BinaryOperator("Customer", "Tom"));
      Session.DefaultSession.Delete(customers);
      Session.DefaultSession.Save(customers); // persist deletion   我的1.58版本Session.Save()没有重载这个方法????

    3. 继承自XPCustomeObject的类必须使用KeyAttribute指定主键,且只能指定一个字段(??????)。
      public class Customer : XPCustomObject
      {
        [Key]
        public string Name;
      }

    4. 指定字段的类型和大小。
      public class Customer : XPObject
      {
        [Size(20)]
        public string Name;
        
        [DbType("nvarchar(6)"]
        public string Postcode;
        
        [DbType("Text")]
        public string Summary;
      }

    5. 字段验证。缺省情况下我们使用 public field 来公开字段,改用 public property 就可以实现字段赋值验证。
      public class Customer : XPObject
      {
        private string postcode;
        public string Postcode
        {
          get { return postcode; }
          set
          {
            // ... 验证代码省略...
            postcode = value;
          }
        }
      }
      
    6. 只读字段。缺省情况下XPO只为可写的公开字段或属性创建字段,我们可以通过PersistentAttribute属性来创建只读字段。NonPersistentAttribute作用则相反,表示该字段或属性不写入数据库。
      public class Customer : XPObject
      {
        [Persistent]
        public DateTime Date
        {
          get { return DateTime.Now; }
        }

        [Persistent("Date")]
        private DateTime date;
      }

    7. 一对多。下面的演示代码,每个消费者有多条收货地址。
      
      "CustomerAddress" 关系名称。
      "Aggregated" 级联操作(删除、更新)。
      "Addresses" 集合属性名。
      
      public class Customer : XPObject
      {
        public string Name;
        
        [Association("CustomerAddress", typeof(Address)), Aggregated]
        public XPCollection Addresses
        {
          get { return GetCollection("Addresses"); }
        }
      }
      
      public class Address : XPObject
      {
        [Association("CustomerAddress")]
        public Customer Customer;
      }

    8. 一一对应时,不会自动创建其对应对象。

      public class Customer : XPObject
      {
        public Customer()
        {
          // Do not place any code here.
        }
      
        public Customer(Session session) : base(session)
        {
          // Do not place any code here.
        }

        public Address Address;
        
        public override void AfterConstruction()
        {
          base.AfterConstruction();
          // Initialize object properties here

          Address = new Address();
        }
        ...
      }  
      
    9. 多对多。每个消费者拥有多个类型,每个类型又包含消费者。
      注意两个类中关系名相同。
      public class Customer : XPObject
      {
        public string Name;
        
        [Association("CustomerType", typeof(Type)), Aggregated]
        public XPCollection Types
        {
          get { return GetCollection("Types"); }
        }
      }
      
      public class Type : XPObject
      {
        [Association("CustomerType", typeof(Customer))]
        public XPCollection Customers
        {
          get { return GetCollection("Customers"); }
        }
      }
      
    10. 延迟字段。DelayedAttribute属性让字段只有在被操作的时候才载入数据,比较适合操作大数据字段。
      public class Goods: XPObject
      {
        public string Name;
        public decimal Price;
        public string CatalogId;
        ...
        private XPDelayedProperty image1 = new XPDelayedProperty();
      
        [Delayed("image1")]
        public Byte[] Image1
        {
          get { return (Byte[])image1.Value; }
          set { image1.Value = value; }
        }
    }

    11. 分页。注意XPO的XPCursor的作用是分页缓存,而并非我们一般情况下说的分页。和XPCollection不同,XPCursor每次只将指定数目(PageSize)的实体对象载入内存,当我们枚举操作(IEnumerable)的对象超出当前缓存,则自动读取下一页继续操作,这种方法比XPCollection要节省内存。正因为如此,XPCursor只提供了foreach单向循环操作,而不能使用索引器的方式获取实体对象。至于我们平常所用的分页方法,可以使用XPPageSelector基于XPCollection实现。

    12. 连接 SQL Server
      Session.DefaultSession.Connection = new System.Data.SqlClient.SqlConnection("server=(local);uid=sa;pwd=;database=test");
      Session.DefaultSession.AutoCreateOption = AutoCreateOption.SchemaOnly;

    13. NullValueAttribute 属性只是当字段等于某个特定值时,写入数据库时将值替换为DBNull。而获取时,如果值为DBNull,则使用该指示值替代。
      public class Customer : XPObject
      {
        public string Name;
        
        [NullValue("unknown email!")]
        public string Email;
      }
      
    14. IndexedAttribute 索引字段
      public class Customer : XPObject
      {
        [Indexed(Unique = true)] // 无重复索引. "[Indexed]" 有重复索引。
        public string Name;
      }
      
    15. XPObject.Reload()只刷新当前对象的属性,不刷新其关联子对象的属性。

    16. 监视XPO自动生成SQL。在app.config 中增加下面的配置。1.58我测试无效。?????

    [XML]

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <system.diagnostics>
    <trace autoflush="true" indentsize="4">
    <listeners>
    <add name="LogFileTraceListener" type="System.Diagnostics.TextWriterTraceListener"
    initializeData="trace.log" />
    <remove name="Default" />
    </listeners>
    </trace>
    <switches>
    <add name="XPO" value="3" />
    </switches>
    </system.diagnostics>
    </configuration>

    17. ExplicitLoadingAttribute可以指定多层引用的递归层数,以减少数据库查询,提高性能。

      class A : XPObject
      {
        public string Name = "A";
      }

      class B : XPObject
      {
        public string Name = "B";
        [ExplicitLoading(3)]
        public A A;
      }

      class C : XPObject
      {
        public string Name = "C";
        [ExplicitLoading]
        public B B;
      }

      class D : XPObject
      {
        public string Name = "D";
        [ExplicitLoading]
        public C C;
      }

      class E : XPObject
      {
        public string Name = "E";
        public D D;
      }

      缺省情况下,我们检索到E对象时,系统会自动获取(构造)其引用的对象,当引用层数很深时,就会产生多条SQL语句。此时我们可以使用[ExplicitLoading]属性合并多个查询。在上面的例子中,D被做了属性标记,那么会自动往下递归查找有该标记的引用。因此会将 D、C、B的查询构造到同一条SQL语句中,而A依然会被单独构造SQL,我们可以将B中的属性标记加上参数3,就可以将A也加到递归中,如此D、C、B、A合并到同一条SQL语句中。注意这个Depth参数表示所引用类型距离Root的深度,A距离E有3层。

    18. 多ASP.net Application中使用XPO,DevExpress推荐方案是为每个Request创建一个Session,也就是说:
    Stateless + Session for each Request + Connection Pool

     

  • SimpleAssemblyExplorer.Build.20080713

    热烈庆祝本人再次上网接通世界!

    特别更新Simple Assembly Explorer!

     

    Posted Jul 13 2008, 02:45 PM by wicky with no comments
    Filed under:
  • SimpleReminder.Build.20080713

    Simple Reminder Build 2008.07.13 ....

     

    Posted Jul 13 2008, 02:42 PM by wicky with no comments
    Filed under:
  • AspxGridView: TypeConverter cannot convert from System.String

    http://www.devexpress.com/Support/Center/p/Q21651.aspx?searchtext=TypeConverter+&tid=4b2d6f97-c4ae-48fc-87f6-8c5da6541e40

    Created by DataItem template does not refresh in CustomCallback at 10/5/2007 1:01:40 PM

    I am using the ASPxGridView with an LLBLGenDataSource. I am displaying a templated column in the grid whose contents are a string that is returned by a method on the page code behind class as follows:

               <dxwgv:GridViewDataTextColumn FieldName="ApplicantId" VisibleIndex="0" Caption="Applicant Name" ReadOnly="true" UnboundType="String">
                    <DataItemTemplate>
                        <%# GetApplicantName(Eval("Applicant")) %>
                    </DataItemTemplate>
                </dxwgv:GridViewDataTextColumn>

    This page is displaying correctly when first loading, however, if I try to choose a different page in the page selector or click on a button that causes a postback event I receive an error saying "TypeConverter cannot convert from System.String".

    If I comment out the template (and just display the ApplicantId) the page and grid work without error. Is there some other method I need to intercept or a setting I should include on this column to display this value correctly. I do not need any edit functionality on this column as the grid is display only.

    The code behind method is as follows:

        protected static string GetApplicantName(object applicantObject) {
            ApplicantEntity applicant = applicantObject as ApplicantEntity;
            if (applicant != null) {
                return applicant.PersonName.FirstName + " " + applicant.PersonName.LastName;
            }
            else {
                return "";
            }
        }

    The aspx code for the grid is:

        <dxwgv:ASPxGridView ID="RequestGrid" runat="server" AutoGenerateColumns="False" CssFilePath="~/App_Themes/Office2003 Olive/{0}/styles.css"
            CssPostfix="Office2003_Olive" DataSourceID="RequestDS" KeyFieldName="RequestId"
            Width="100%">
            <Columns>
                <dxwgv:GridViewDataTextColumn FieldName="RequestId" ReadOnly="True" Visible="False"
                    VisibleIndex="0">
                    <EditFormSettings Visible="False" />
                </dxwgv:GridViewDataTextColumn>
                <dxwgv:GridViewDataTextColumn FieldName="ApplicantId" VisibleIndex="0" Caption="Applicant Name" ReadOnly="true" UnboundType="String">
                    <%--<DataItemTemplate>
                        <%# GetApplicantName(Eval("Applicant")) %>
                    </DataItemTemplate>--%>
                </dxwgv:GridViewDataTextColumn>
                <dxwgv:GridViewDataTextColumn FieldName="UserId" VisibleIndex="1">
                </dxwgv:GridViewDataTextColumn>
                <dxwgv:GridViewDataTextColumn FieldName="StatusId" VisibleIndex="2">
                </dxwgv:GridViewDataTextColumn>
            </Columns>
            <Images ImageFolder="~/App_Themes/Office2003 Olive/{0}/">
                <ExpandedButton Height="12px" Url="~/App_Themes/Office2003 Olive/GridView/gvExpandedButton.png"
                    Width="11px" />
                <CollapsedButton Height="12px" Url="~/App_Themes/Office2003 Olive/GridView/gvCollapsedButton.png"
                    Width="11px" />
                <DetailCollapsedButton Height="12px" Url="~/App_Themes/Office2003 Olive/GridView/gvCollapsedButton.png"
                    Width="11px" />
                <DetailExpandedButton Height="12px" Url="~/App_Themes/Office2003 Olive/GridView/gvExpandedButton.png"
                    Width="11px" />
            </Images>
            <Styles CssFilePath="~/App_Themes/Office2003 Olive/{0}/styles.css" CssPostfix="Office2003_Olive">
                <LoadingPanel ImageSpacing="10px">
                </LoadingPanel>
                <Header ImageSpacing="5px" SortingImageSpacing="5px">
                </Header>
            </Styles>
        </dxwgv:ASPxGridView>

    Thank you!

    Reviewed by Developer Express Team at 10/5/2007 7:22:49 PM

     

    Processed (Insufficient Information) by Developer Express Team at 10/5/2007 10:17:12 PM

    Hi Colin,

    Thank you for the report. Unfortunately, this information does not allow us to clearly diagnose this issue. Please send us a sample project showing this issue and we will try to fix this problem.

    Thanks,
    Plato

    Reactivated by DataItem template does not refresh in CustomCallback at 10/6/2007 5:24:55 AM
    Attachment: TestWebApp.zip Size (1687428 bytes)

    I have created a test project and included all source files plus a backup of the database I used to test.

    Thanks

    Processed (Answered) by Developer Express Team at 10/8/2007 7:18:57 PM

    Hi,

    Thank you for the report. I see the problem, and to resolve it, please set the ASPxGridView.EnableRowsCache property value to false. This solution allowed us to eliminate the problem you reported to us.

    Thanks,
    Plato

    Posted Jul 11 2008, 02:11 PM by wicky with no comments
    Filed under:
  • 番禺