之前的博客我介绍过如何做一个动画,以及渐变风格动画,关键帧动画。我们如果仅仅使用这些知识做一个模拟现实的动画,仍然是比较复杂的,比如:我们要实现一个篮球掉下再弹起,再掉下,再弹起的动画。或者我们要实现一个类似钟摆的动画效果,它需要我们去研究物理学,数学的知识,Silverlight 3 内置了11中Animation Easing,它可以让我们更容易的实现一些常见的动画效果。
这内置的11种Animation Easing 动画效果是:
- 倒退缓冲(BackEase):让动画在继续之前往后退一点。这有点象在斜坡上启动汽车,会往后倒退一点然后才前进。
- 弹跳缓冲(BounceEase):有弹回效果的动画,类似我们前面提到的篮球落下,弹起,再落下,即弹跳反冲。
- 圆缓冲(CircleEase):创建使用循环函数加速和/或减速的动画。 基于三角函数(圆函数)来加速动画,一开始的加速度比较慢,越往后加速度越快。
- 立方体缓冲(CubicEase):创建使用公式
加速和/或减速的动画。 与圆缓冲类似,但是是基于立方体函数的时间来产生一个一开始加速度较慢然后越来越快的动画。 - 伸缩缓冲(ElasticEase):创建表示弹簧在停止前来回振荡的动画。类似于弹跳缓冲(BounceEase),它会让一个值摆动直到停下为止。
- 指数缓冲(ExponentialEase):创建使用指数公式加速和/或减速的动画。类似于圆缓冲和立方体缓冲,只是加速度的值是按照指数来变化的。
- 乘方缓冲(PowerEase):创建使用公式
(其中,p 等于 PowerEase.Power 属性)加速和/或减速的动画。这是一种指数缓冲,缓冲的值与时间的乘方成比例。 - 平方缓冲(QuadraticEase):创建使用公式
加速和/或减速的动画。非常类似于CubicEase,除了在这个缓冲中,值是基于时间的平方。 - 四次方缓冲(QuarticEase):创建使用公式
加速和/或减速的动画。类似于Cubic和Quadratic,只是值是基于时间的立方。 - 五次方缓冲(QuinticEase):创建使用公式
加速和/或减速的动画。类似于Cubic、Quadratic和Quartic,值基于时间的五次方。 - 正弦缓冲(SineEase):创建使用正弦公式加速和/或减速的动画。沿着正弦波来对值进行加速。
另外 Animation Easing 还有一个缓动模式,它是下面三个枚举之一,用于决定Animation Easing 的行为方式,参看:
http://msdn.microsoft.com/zh-cn/library/system.windows.media.animation.easingmode(VS.95).aspx:
- EasingMode.EaseIn:内插遵循与缓动函数相关联的算术公式。
- EasingMode.EaseOut(默认值):内插遵循 100% 内插减去与缓动函数相关联的公式输出。
- EasingMode.EaseInOut:内插将 EaseIn 用于动画的前半部分,将 EaseOut 用于动画的后半部分。
下面是一个经典的演示这11中动画效果的例子,例子来自: http://www.shinedraw.com/animation-effect/11-storyboard-animation-easing-demonstration/ 那里也有这个例子的源码下载:
在下面,点击每种动画对应的图标,根据选择的动画类型,持续时间就会演示这个动画。
参考资料:
译文:Silverlight 3.0 新功能之二 : 动画缓冲(Animation Easing)
http://www.cnblogs.com/arthur008/archive/2009/05/21/1466417.html
稳扎稳打Silverlight(37) - 3.0动画之Easing(缓动效果)
http://www.cnblogs.com/webabcd/archive/2009/08/20/1550334.html
Silverlight动画概述
http://msdn.microsoft.com/zh-cn/library/cc189019(VS.95).aspx
微软官方网站Animation Easing的例子
http://samples.msdn.microsoft.com/Silverlight/silverlight_next/Animations/easing_functions_gallery/testpage.html
Silverlight 3's New Animation Easing
http://www.wintellect.com/CS/blogs/jprosise/archive/2009/03/26/silverlight-3-s-new-animation-easing.aspx
Easing in Silverlight and WPF
http://www.kirupa.com/blend_silverlight/easing_sl_wpf_pg1.htm
Silverlight 3.0: Easing Functions
http://www.silverlightplayground.org/post/2009/03/18/Silverlight3-Easing-Functions.aspx
Silverlight 3 Quick Tip #3: Creating custom easing for Silverlight animations
http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/03/19/silverlight-3-quick-tip-3-creating-custom-easing-for-silverlight-animations.aspx
Easing animations in Expression Blend
http://simplesilverlight.wordpress.com/2008/03/18/easing-animations-in-blend/
11 Storyboard Animation Easing Demonstration
http://www.shinedraw.com/animation-effect/11-storyboard-animation-easing-demonstration/
Easing Function In Blend 3 In Silverlight 3
http://www.c-sharpcorner.com/UploadFile/dpatra/EasingFunctionInBlend307102009134910PM/EasingFunctionInBlend3.aspx
MIX 2010 大会上发布了 Silverlight 4 RC。 以前因为 VS2010 RC 暂时不支持 Silverlight 4,一直没有装VS2010 RC。 现在终于可以装了。
下面就是安装的一些注意事项:
首先当然是卸载之前的版本,包括下面罗列的这些卸载项,卸载一定要卸载干净才好安装:
Microsoft Expression Blend Preview for .NET 4
Microsoft Expression Blend SDK Preview for .NET 4
Mircosoft Expression Blend 3 SDK
Microsoft Silverlight 4 Tools for Visual Studio 2010 Beta 2
Microsoft Silverlight 4 Beta SDK
Mircosoft Silverlight
Mircosoft Silverlight 3 SDK
WCF RIA Services Preview for Visual Studio 2010 (这个要优先删除,否则一旦.NET Framework 4删除后,这个就没法卸载了)
Microsoft Visual Studio 2010 Ultimate Beta 2 - ENU
Microsoft .NET Framework 4 Extended Beta2
Microsoft .NET Framework 4 Client Profile Beta2
Microsoft .NET Framework 4 Multi-Targeting Pack
Microsoft .NET Services SDK(March 2009 CTP)
Microsoft ASP.NET MVC 2
Microsoft ASP.NET MVC 2 - Visual Studio 2010 Tools
Microsoft Help 3.0 Beta2
Microsoft SQL Server Compact 3.5 SP2 Beta English
Microsoft Sync Framework Runtime v1.0 SP1 Beta(x86)
Microsoft Sync Framework SDK v1.0 SP1 Beta
Microsoft Sync Framework Service v1.0 SP1 beta(x86)
Microsoft Sync Service for ADO.NET v2.0 SP1 Beta(x86)
Microsoft Team Foundation Server 2010 Beta 2 Object Model - ENU
Microsoft Visual C++ 2010 Beta 2 x86 Runtime - 10.0.21006
Microsoft Visual F# Runtime 1.0
Microsoft Visual Studio 2010 ADO.NET Entity Framework Tool Beta 2
Visual Studio 2010 Beta 2 Tools for SQL Server Compact ENU
Visual Studio 2010 Tools for Office Runtime Beta 2 (x86)
Windows Azure Tools for Microsoft Visual Studio 2010 1.0 (11/2009) Beta 2
VS2010 RC 版的安装:
下载并安装 Microsoft Visual Studio 2010
http://www.microsoft.com/downloads/details.aspx?FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a&displaylang=en
下载并安装3个VS2010 RC的补丁
这部分信息可以参看下面两篇Scott的博客
http://blog.joycode.com/scottgu/archive/2010/02/16/115889.joy
http://blog.joycode.com/scottgu/archive/2010/03/14/115909.joy
KB980610 (VS 2010 RC版Intellisense崩溃问题的补丁)
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=26662&wa=wsignin1.0
KB980920 (修补了工具提示调用和停留于标识符之上时崩溃问题的补丁)
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=27019
KB981167(修补了Web Forms设计器不能向自动生成的设计器文件中正确添加控件问题的补丁)
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=27117&wa=wsignin1.0
Silverlight 4 Tools for VS2010RC
下载并安装Silverlight 4 Tools for Visual Studio 2010(March 2010版)
该Tools会同时安装Silverlight Developer runtime、 SDK、 tools、 和 WCF RIA Services
Silverlight 4 Tools for Visual Studio 2010
这部分信息可以参看: http://www.silverlight.net/getstarted/silverlight-4/
Blend 4
下载并安装 Expression Blend™ 4 Beta。 这个版本才是上面版本Silverlight4可用的。
http://www.microsoft.com/downloads/details.aspx?FamilyID=6f014e07-0053-4aca-84a7-cd82f9aa989f&displaylang=en
一些你可能用到的支持 Silverlight 4 RC 的Toolkit
WCF RIA Services Toolkit March 2010
http://www.microsoft.com/downloads/details.aspx?FamilyID=7b43bab5-a8ff-40ed-9c84-11abb9cda559&displaylang=en
Silverlight Toolkit
http://silverlight.codeplex.com/
Silverlight 4 RC 的改进
Ensuring That Your Silverlight Applications Work with Silverlight 4
http://msdn.microsoft.com/en-us/library/cc645049(VS.96).aspx
Silverlight 4 RC 相对于 Beta 2 的变化
http://www.cnblogs.com/024hi/archive/2010/03/16/1686828.html
09年的QCon大会给我的感觉是国内技术大会中技术含量最高的,收获相当丰厚。2010年的QCon大会仍然是非常期待的。
我感兴趣的关键字主要是:架构,RIA,网站案例分析,实战经验。我对这些感兴趣的原因如下:
- 学习架构可以让自己整体把握能力增强,技术人员在一定年份后,深入学习架构是一个几乎无法逃避的路。
- 看别人的网站案例分析,实战经验,可以在其中时不时听到一个小技巧,一个小技巧就可以让自己少走很多弯路,这些技巧可不是通过课本的学习可以学到的,需要有足够的经验积累才能知道,现在有机会让你不用自己去摔跟头知道它,何乐而不为呢?
- 关注RIA(我关注的主要是 Silverlight,因为我有C#的基础,比起Flash,更容易让我入门,而且这种经验也可以用在WPF中)是因为RIA的出现,可以让我做很多以前不敢想象的事情,RIA会带动用户体验的很大的一步进步。
在2010年的QCon大会的日程中我可以看到下面感兴趣的课程:
信息的特征:
- 客观性:信息是客观事物在人脑的反映。而反映的对象则有主观和客观的区别,因而,信息可以分为主观信息和客观信息。主观信息,如决策、指令、计划等;客观信息,如国际形势,经济发展等信息。
- 普遍性:物质的普遍性决定了信息的普遍存在,因而信息是无所不在的。
- 无限性:客观世界是无限的,反映客观世界的信息自然也是无限的。
- 动态性:信息随着时间的变化而变化,因而是动态的。
- 依附性:信息是客观世界的反映,因而要依附于一定的载体而存在,需要有物质的承担者。信息不能完全脱离物质而独立存在。
- 变换性:信息通过处理可以实现变换或转换,使其形式和内容发生变化,以适应特定的需求 。
- 传递性:信息在时间上的传递就是存储,在空间上的传递就是转移或扩展。
- 层次性:客观世界是分层次的,反映它的信息也是分层次的。
- 系统性:信息可以表示为一种集合,不同类别的信息可以形成不同的整体。因而,可以形成与现实世界相对应的信息系统。
- 转换性:信息的产生不能没有物质,信息的传递不能没有能量,但有效地使用信息可以把信息转化为物质或能量。
电子政务:是指政府机构在其管理和服务职能中运用现代信息技术,实现政府组织结构和工作流程的重组优化,超越时间、空间和部门分隔的制约,建成一个精简、高效、廉洁、公平的政府运作模式。
电子政务模型,或者叫模式,或者叫内容,可简单概括为两方面:
- 政府部门内部利用先进的网络信息技术实现办公自动化、管理信息化、决策科学化;
- 政府部门与社会各界用户(企业和公众)利用网络信息平台充分进行信息共享与服务、加强群众监督、提高办事效率及促进政务公开等等。
从政府工作形式看,分为四个方面,也体现电子政务的四个发展阶段:
- 公文电子化;
- 内部办公自动化,建立政府部门内部办公自动化系统,应用计算机辅助行文、汇报、报表及管理业务,达到业务流程化;
- 行政管理网络化,实现在线信息交互和网上交互式办公;
- 部门间协同工作,以业务(项目)为中心,多个政府机构利用网络平台协同工作。
从政府与用户交互的角度,电子政务模式也分四种形式,包括:
- 网上信息发布,用户可以从网上获取法规、办事程序条例等政务信息;
- 网上信息单向流动,用户可以下载表格等;
- 网上双向互动,实现信息交互,网上登记、信息咨询、上传表格、政府采购、招标、报税等;
- 在线事务处理,涉及多个部门的业务借助网络完成处理,网上政府审批、证照办理等。
从电子政务的服务对象来看,电子政务主要包括几个方面:
- 政府内电子政务(G2G);
- 政府对企业电子政务(G2B);
- 政府对公民电子政务(G2C)。
G2G是上下级政府、不同地方政府、不同政府部门之间的电子政务。
它的主要目的是:指打破机关组织部门的垄断和封锁,加速政府内信息的流转和处理,克服政府各部门相互推诿、扯皮现象,提高政府内部的行政效率。
政府内电子政务主要包括以下内容:
- 电子法规政策系统;
- 电子公文系统;
- 电子司法档案系统;
- 电子财政管理系统;
- 电子资料库;
- 电子办公系统;
- 电子邮递;
- 电子培训系统;
G2B是政府通过网络系统进行电子采购与招标,精简监管、管理业务流程,提高办事效率,迅速地为企业提供便捷的各种信息服务,减轻企业负担,促进企业发展。
政府的电子采购与招标有利于体现公平公正的原则和防止腐败,大大节约政府部门的运行成本。
政府对企业的管理服务以及监督的网络化,有利于营造公平的竞争环境,减少暗箱操作以及权钱交易,通过获取政府公开的各种信息资源,企业也可避免发展的盲目性,比较容易地找到更多的商机。
G2B主要包括以下内容:
- 电子采购与招标;
- 电子税务;
- 电子证照办理;
- 信息咨询服务;
- 中小企业电子服务;
可见,电子政务不仅为电子商务提供基础支撑和环境保障,而且通过G to B模式的电子政务,为电子商务提供业务的需求,实现电子政务与电子商务的互动推进。
G2C是电子政务的重要内容,是通过电子网络系统为公民提供各种服务。
通过G2C将提高政府政务活动的透明性,有利于公民的民主参与和有效监督,促使公务员的廉洁自律。
其主要内容包括:
- 教育培训服务;
- 就业服务;
- 电子医疗服务;
- 社会保险网络服务;
- 公民信息服务;
- 交通管理服务;
- 电子证件服务;
可见,电子政务是实现电子社区的前提和基础。
发挥信息系统效益的关键是信息系统的有机共享,电子政务也一样,电子政务信息资源共建共享的顺利实现,必须建立强有力的保障机制。这些机制包括:
- 组织保障机制;
- 法律政策保障机制;
- 经济保障机制;
- 技术保障机制;
- 人才保障机制;
- 安全保障机制;
组织保障机制:
它是一种通过建立相关的组织管理机构实施人为干预与调节来增进电子政务信息资源共建共享的行政机制。完全有必要成立一个电子政务信息资源建设的服务机构,负责实施电子政务信息资源的共建与共享,统筹兼顾,统一规划,从全局出发,重点规划设计政府部门协同工作的内容和流程,打破信息资源“部门割据”、“条块分割”的局面,解决政务信息资源为各个部门所有、各个部门垄断的问题,真正实现电子政务信息资源的共建与共享。
法律政策保障机制:
近年来,我国政府制定并颁布了一系列有关电子政务建设的法规政策,如《国家信息化领导小组关于我国电子政务指导意见》、《电子政务工程技术指南》、《电子政务信息共享互联互通平台总体框架技术指南(试行)》、《国家信息化领导小组关于加强信息处理安全保障工作的意见》、《全国政府系统政务信息化建设2001-2005年规划纲要》等。政府部门还需要加快制定一系列有关电子政务信息资源共建共享的方案、制度、规定、条例等,明确各相关主体的责任、权利和义务,为电子政务信息资源共建共享提供一个良好的法律政策环境。
经济保障机制:
经济保障机制应是按照“谁投资谁受益”原则建立的协调电子政务信息资源共建共享供需双方利益的市场机制。电子政务信息资源共建共享的实现离不开足够的资金投入,政府是实施电子政务的主体,各级政府要成为资金投入的主体力量,要为电子政务信息资源的共建共享提供足够的资金投入,各级政府要将电子政务信息资源共建共享所需经费纳入本级政府的财政预算,对于涉及多个部门的信息共享互联互通工程建设,资金应统筹安排,公共部分的建设要设立专项经费予以保障。而共建共享所需资金仅仅依靠政府的财政投入远远不够,还应在充分发挥中央和地方政府财政投入主导作用的同时,制定相应政策,充分调动高等院校、科研院所、中介机构、行业协会、企业等各方面的积极性,鼓励和引导社会资金参与电子政务信息资源共建共享系统工程建设、管理和运营,电子政务信息资源共建共享工程的建设和管理需要积极探索市场化运行模式,逐步向企业化、市场化运行方向转化。在资金投入过程中,要切实加强资金管理,完善资金管理制度和资金使用的绩效考评制度,提高资金使用的规范性和有效性。
技术保障机制:
- 构建信息共享互联互通平台
- 全面推行标准化
- 加强共享数据库建设
构建信息共享互联互通平台:
根据《电子政务信息共享互联互通平台总体框架技术指南(试行)》的要求,信息共享互联互通平台应由下面5个基本系统组成:
- 流程管理系统;
- 应用集成系统;
- 应用适配器系统;
- 管理和监控系统;
- 安全支撑系统;
其中,流程管理系统、应用集成系统、应用适配器系统是平台的核心。
信息共享互联互通平台采用“三横两纵”的总体框架结构。
“三横”为流程层的流程管理系统,应用层的应用集成系统,数据层的应用适配器系统。
“两纵”为支撑“三横”的管理和监控系统及安全支撑系统。
“三横两纵”以“三横”为主体,重点解决信息共享互联互通中数据交换、应用集成、流程协同三个层次的问题。
“两纵”是“三横”实现安全的、可管理的、可监控的信息共享互联互通环境的支撑。
全面推行标准化:
标准化是实现电子政务信息资源共建共享的先决条件,无论是网络统一平台还是资源共享,都需要标准。我国电子政务统一标准的出台速度跟不上电子政务建设步伐。目前,我国电子政务相关标准很多。仅我国已经颁布的国家级标准就达800多个,此外还有各式各样的行业标准。但是如此众多的标准缺乏统一性,标准过多、过泛给政府部门和相关厂商带来了很多不便,甚至形成了大量的信息孤岛。对众多标准加以统一和规范,是解决标准滞后与过多、过泛的惟一途径。因此,要加强标准化建设的管理工作,统一网络和信息的标准规范,统一标准是互联互通、信息共享、业务协同的基础。
加强共享数据库建设:
目前,我国信息资源开发和共享相对滞后的矛盾十分突出,在信息化建设中出现了“有路无车”和“有车无货”等现象,许多数据库更新不及时,甚至是“死库”,一些电子政务关键业务不能实现互联互通和互操作。从而造成了许多信息基础设施和技术设备得不到充分利用,制约了电子政务功能的发挥。因此,必须改变目前建库力量分散,低水平重复建设的局面。按照整合、共享、完善、提高的要求,建立电子政务信息共享数据库,有效调控增量资源,激活存量资源,最大限度发挥现有资源的潜能。
人才保障机制
软件的使用人才的素质提高,才是提高整体效益的最根本所在。据国家行政学院的一项调查,大约有20%的公务员对计算机操作几乎处于空白的状态,这说明在推进政府信息化的过程中,提高公务员的整体素质,特别是计算机应用方面的能力,将是一项艰巨的任务。
安全保障机制
影响电子政务信息安全的因素有很多,如网上黑客入侵和犯罪、网上病毒泛滥和蔓延,信息间谍的潜入和窃密,网络恐怖集团的攻击和破坏,内部人员的违规和违法操作,网络系统的脆弱和瘫痪,信息安全产品的失控等。因此,保障电子政务信息资源共建与共享,首先要保障共建与共享信息的安全,信息安全是电子政务信息资源共建与共享中最关键、最根本的问题。
参考资料:
http://www.ittang.com/2009/0527/9320_2.html
如何共建电子政务信息资源共享机制?
http://www.dianliang.com/hr/cio/zhengwu/200607/hr_127110.html
VS2010正式版马上就要发布了,从09年国庆节后开始使用VS2010 Beta2测试版,到现在也已4个月了,VS2010的的变化很大,但是给我带来比较大影响的反而是几个小的功能变革。
VS2010改变了我对WPF观念
在听说VS2010是WPF开发之前,我总觉得WPF由于要实现这么多绚丽的界面,在性能上肯定损耗的不少。在之前,由于对美好界面的渴望,我也自己学习过WPF,由于公司日常工作用不到WPF,也就是写写小程序玩玩,但是能用WPF来开发VS2010,在此之前我是无论如何都没有想到的,非常吃惊,这就是我当初听到VS2010要用WPF来开发的感受。在使用VS2010这么久后,VS2010测试版虽然有时候会时不时没有响应,但是它的速度,性能,一点都不比我装在同一台机子上的VS2008差。VS2010 RC 版据说解决了那些没有响应的问题,同时速度优化了很多,由于我要用到Silverlight 4 的开发,就没装 VS2010 RC 版,VS2010的正式版确实很值得期待。网上说 VS2010 RC 版对性能的改进体验非常深刻,参看:.NET 4 RC版 发布了 这篇博客。
代码智能提示的改进
.NET Framework 的函数库越来越强大,也越来越多,不是特长常用的,函数名确实难以记住,VS2008 开发环境的智能提示是根据方法或者属性的起始字母来选择的,如下图所示:
VS2010中则搜索的是包含搜索词的所有函数和属性。这样如下图所示,我们搜索 edit ,不仅仅可以搜索出 EditIndex,还可以搜索出字母中间带Edit的方法,属性,事件。
这样,那些我们没有精确记忆的属性和方法就会出现在智能提示中,对我们的编程非常方便实用。
有关这方面的内容你可以参看: VS 2010 和 .NET 4.0 系列之《VS 2010代码智能提示的改进》篇
导航和查询代码的改进
当我们阅读一个代码非常膨大,而不是又不是特别熟悉它的代码结构时,如何找到并定位代码,会是一个难题。这个功能VS2010新增的功能对我们非常有用。如下图:(Ctrl+逗号)的键盘快捷键就可以打开下面的“Navigate To(导航到)”对话框。在Search terms 中我们输入2个关键字:“cache action”,就可以搜索出包含这两个关键字的方法,类,属性,事件。这跟上面的智能提示一样,是包含,而不是以某个字开头。
有关这方面的内容你可以参看: VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇
鼠标滚轮滚动,对应字体大小的变化
这个功能对演示代码非常有帮助,比如公司内部,我在给大家演示一些代码时,由于现在的屏幕分辨率越来越大,我又习惯用最大的分辨率,这样稍稍离我远点的,就看不清楚编辑器的内容,以前我是在演示时,修改VS开发环境编辑器的默认字体大小,不演示了,再改回去,现在我不需要反复的改来改去,直接用鼠标中键滚轮来回滚动,就可以轻松实现字体的放大和缩小,非常实用,非常方便,我经常使用它。
使编程更容易;让我们对WPF更有信心。这就是我对VS2010的感觉。
固定成本和可变成本
固定成本: 费用在某个周期内,固定发生,不随产值的增加而增加。比如系统设计工具软件的许可证费用;信息系统操作人员的工资等。
可变成本: 费用在某个周期内,随产值的增大而增大。比如计算机使用时的开销,购买的光盘,闪存等存储设备花费等。
货币的时间价值
货币是有时间价值的,这个时间价值简单一点讲,就是今天(2009-12-22)的100元钱与明年今天(2010-12-22)的100元钱的价值是不一样的。为什么呢?很简单,“钱能生钱”,如果我把100元钱存到银行,明年的今天,这100元钱将变为:100元+100元钱1年的利息。
货币的时间价值是货币在使用过程中,随着时间的推移发生的增值,也称资金的时间价值。通常,静态投资回收期不考虑资金占用成本(货币时间价值),而是使用项目建成后年现金流量衡量。动态投资回收期则需要考虑货币时间价值,通常使用项目建成后年贴现现金流(净现值)衡量。
P元钱在n年之后的价值就是如下公式(i 为利息): 
反过来思考,得知n年后我有F元钱,要折算为今天的价值,则称为“折现”。计算公式为:
注意:该公式就是上面的式子变换而来。
贴现率
贴现率是指将未来支付改变为现值所使用的利率。贴现率公式如下:
贴现率=贴现利息/票据面额×100%
贴现因子(discount factor),也称折现系数、折现参数。
所谓贴现因子,就是将来的现金流量折算成现值的介于0-1之间的一个数。贴现因子在数值上可以理解为贴现率,就是1个份额经过一段时间后所等同的现在份额。
投资回报期
动态投资回收期 = 累计净现金流量折现值开始出现正值的年份数-1+∣上年累计净现金流量折现值∣/当年净现金流量折现值
参看资料:
系统分析员备考之经济管理篇(一)
http://home.exam8.com/space-66-do-thread-id-3531.html
2009年上半年系统分析师下午试题答案1
系统分析师考试资料:投资回报率计算
http://hi.baidu.com/lxyrose/blog/item/20e0f3171d939413962b432d.html
前面一篇博客“WPF/Silverlight 控件的基本组成” 介绍了创建控件模板的一些基础知识,这篇是一个简单演示,演示一个不规则的按钮。
为了简单期间,我们只定义了按钮的鼠标移动到上面以及鼠标点击两个特效。其他特效没有定义。
演示效果如下:
对应Xaml代码,代码中已经增加了注释,如果前一篇博客阅读过,对代码的阅读就没有难度,代码如下:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d=http://schemas.microsoft.com/expression/blend/2008
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Class="SilverlightApplication_IrregularButton.MainPage"
Width="250" Height="150" mc:Ignorable="d">
<UserControl.Resources>
<!-- 模板定义 //-->
<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="Button">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused"/>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<!-- 当鼠标滑动到上面时,不规则按钮放大,以显示当前在这个按钮上//-->
<Storyboard>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="path"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
<EasingDoubleKeyFrame KeyTime="00:00:00" Value="1.1"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="path"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
<EasingDoubleKeyFrame KeyTime="00:00:00" Value="1.1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<!-- 当鼠标按下时,不规则按钮颜色变深,表示点击了 //-->
<Storyboard>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="path"
Storyboard.TargetProperty="(UIElement.OpacityMask).(GradientBrush.GradientStops)[0].(GradientStop.Offset)">
<EasingDoubleKeyFrame KeyTime="00:00:00" Value="0.4"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Path x:Name="path" Stretch="Fill"
Stroke="{TemplateBinding BorderBrush}"
StrokeThickness="2" Margin="10.652,1.073,8,0"
UseLayoutRounding="False"
Data="M36.891956,9.7781897 C64.593346,-11.270991 79.772194,-3.6822519 95.642052,17.778385 C176.95827,
15.002772 153.51022,23.269783 98.359367,44.312874 C81.101433,49.818928 46.730473,42.151268 47.980583,
38.40152 C28.298779,43.241684 7.1613593,35.330677 36.891956,9.7781897 z"
RenderTransformOrigin="0.5,0.5" Fill="{TemplateBinding Background}" >
<Path.OpacityMask>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="White" Offset="1"/>
<GradientStop Color="#26FFFFFF"/>
</LinearGradientBrush>
</Path.OpacityMask>
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Path.RenderTransform>
</Path>
<ContentPresenter Margin="33,18,72,18"/>
</Grid>
</ControlTemplate>
<!-- 定时默认样式 //-->
<Style x:Key="IrregularButton" TargetType="Button">
<Setter Property="Template" Value="{StaticResource ButtonControlTemplate1}"/>
<Setter Property="Background" Value="#FFA56B16"/>
<Setter Property="Foreground" Value="#FF000000"/>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<!-- 使用样式定义的按钮 //-->
<Button Style="{StaticResource IrregularButton}"
Content="Button1" Foreground="#FF2431C2" Background="#FFBA730A" BorderBrush="#FF111695" Height="70" Width="180"/>
</Grid>
</UserControl>
参考资料:
Silverlight2 边学边练 之七 模板与状态
http://www.cnblogs.com/gnielee/archive/2009/08/03/1537929.html
一步一步学Silverlight 2系列(9):使用控件模板
http://www.cnblogs.com/Terrylee/archive/2008/03/08/Silverlight2-step-by-step-part9-using-control-template.html
理解silverlight 2.0中的Templated Control
http://silverlight.cn/index.php?q=node/597
演练:使用 ControlTemplate 自定义按钮的外观
http://msdn.microsoft.com/zh-cn/library/cc903963(VS.95).aspx
Control Templates
http://silverlight.net/learn/quickstarts/controltemplates/
通过使用 ControlTemplate 自定义现有控件的外观
http://msdn.microsoft.com/zh-cn/library/cc189093(VS.95).aspx
创建系统控件的可重用模板
http://msdn.microsoft.com/zh-cn/library/dd185509.aspx
C# 4.0引入了一个新类型:dynamic,简单来说,任何直接声明为这种类型的变量,或者从函数中返回这种类型的值,都将自动地视为后期绑定。即在运行时才会被初始化绑定。这类似于在Visual Basic中把变量声明为“object”,不过它现在可以支持任何类型系统了,不仅仅是CTS(通用类型规范)和COM。
C# 4.0 的主打特性就是动态类型。也就在这里体现。
在 New features in CSharp 4.docx 中提到 dymanic主要应用于下面的场景也是这样:
- 自动反射
- COM组件互操作
- 混合编程,例如IronRuby和IronPython
- 处理Html DOM对象
一个简单例子:
static void Main(string[] args)
{
dynamic person = new System.Dynamic.ExpandoObject();
person.Name = "cary";
person.Age = 25;
person.ShowDescription = new Func<string>(() => person.Name + person.Age);
Console.WriteLine(person.Name + person.Age + person.ShowDescription());
Console.ReadLine();
}
这里的 System.Dynamic.ExpandoObject 是个特殊的对象,简单地说它的行为可以被“扩展”——是如动态语言般真正的扩展,而非静态的多态。当我们使用dynamic 饰变量后,在它之上的方法调用会由编译器和DLR配合出不一样的行为。例如,我们在调用一个方法的时候,DLR会先检查这个动态对象上是否存在符合这个签名的方法,存在则最好,否则便会调用TryInvokeMember来“执行”一个动态方法,而它的参数便是此次调用的全部信息。这样的做法被称为“Method Missing”操作。
DLR 和 CLR 以及编程语言的关系看下图:
注意点:
使用 Dynamic 将导致只能在运行时才能被测试。这就是为什么当你用dynamic类型时,单元测试在你的代码中变得很重要,很重要!!
参考资料:
C#4.0新特性:可选参数,命名参数,Dynamic
http://www.cnblogs.com/carysun/archive/2009/12/09/CSharp4.html
翻译:Visual C# 4.0的新特性-第三部分-Dynamic ExpendoObject
http://www.cnblogs.com/codeyu/archive/2009/12/08/1616839.html
C# 4.0中dynamic的用法
http://space.itpub.net/740297/viewspace-600670
介绍C# 4.0新特性dynamic
http://developer.51cto.com/art/200908/144976.htm
二十行C#代码打造Ruby Markup Builder
http://www.cnblogs.com/JeffreyZhao/archive/2009/10/27/implement-ruby-markup-builder-in-20-lines-of-c-sharp-codes.html
Dynamic in C# 4.0: Introducing the ExpandoObject
http://blogs.msdn.com/csharpfaq/archive/2009/10/01/dynamic-in-c-4-0-introducing-the-expandoobject.aspx
C#4.0的dynamic用法(一)——巧用反射
http://www.cnblogs.com/architect/archive/2009/03/13/1410921.html
C#动静结合编程之三:Duck Typing
http://www.cnblogs.com/weidagang2046/archive/2009/03/26/1421943.html
也谈.NET反射的封装
http://www.cnblogs.com/weidagang2046/archive/2009/04/30/1446928.html
C#动态特性的更多消息
http://www.infoq.com/cn/news/2009/04/Dynamic-CSharp
Fun With Method Missing and C# 4
http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspx
OAuth 协议是现在众多网站提供API服务所选择的认证方式,是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同发起,目的是为API服务提供一个安全、统一和开放的标准。
官方网站对 OAuth 的一句话介绍是:
An open protocol to allow secure API authentication in a simple and standard method from desktop and web applications.
大概意思是说 OAuth 是一种开放的协议,为桌面程序或者基于BS的web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。OAUTH认证授权具有以下特点:
1. 简单:不管是 OAuth 服务提供者还是应用开发者,都很容易于理解与使用;
2. 安全:没有涉及到用户密钥等信息,更安全更灵活;
3. 开放:任何服务提供商都可以实现 OAuth ,任何软件开发商都可以使用 OAuth;
OAUTH认证授权流程:
下面这个图就是演示了认证流程。这个图来自: http://wiki.opensocial.org/index.php?title=OAuth_Use_Cases
上述5个步骤解释如下:
- A user wishes to use their social network data inside of a third party website or application. The application server contacts the social network, but does not have the user's account information, and does not have permission to access the user's data.
用户希望在第三网站和应用上使用他在SNS网站上的用户信息,这些第三方网站联系SNS网站,但是由于没有用户认证信息,这时这些用户信息是不允许访问的。
更技术点说法:
第三方应用程序向SNS网站授权服务发出获取request token的请求。
- The social network responds with information that the application server uses to redirect the user's web browser to a special login page on the social network's domain.
SNS网站把用户的浏览器重定向到SNS网站的登录页面。
更技术点说法:
SNS授权服务响应请求,返回一个尚未认证的request token。
第三方应用获取响应中包含的request token,按照协议规范,附带这个request token,将其重定向到SNS提供的授权页面(User Authorization URL)。
- If the user is logged out of the social network, they input their username and password as if they were normally logging into the site. After they log in, or if they were already logged in (with a cookie), they are asked by the social network to share data with the application.
如果用户没有登录,用户向普通登录一样,输入用户名和密码完成登录。如果用户已经登录(使用记录Cookie的方式),会出现一个页面,问用户是否允许共享他的SNS信息给第三方网站。
更技术点说法:
在Google提供的授权页面上,用户按照提示输入用户账号信息。
- Once permission has been granted, the social network redirects the user's web browser to a predefined URL on the application server, along with a token that can be used to access the user's information.
一旦用户选择信任第三方网站,SNS网站将把Web浏览器重定向到第三方网站,同时把SNS的用户信息传递过去。
更技术点说法:
用户决定允许或拒绝授权给第三方应用,如果用户拒绝授权给此第三方应用,则被重定向到SNS的页面,而不会再回到第三方应用的页面上。
如果用户授权给第三方应用,那么,SNS授权服务接收此请求,将用户重定向到第三方应用提供的页面上,并传递被认证了的request token。
- Using the token as described in the OAuth specification, the application server is now able to access the user's data on the social network.
这样第三方网站就可以访问SNS网站的用户信息了。
更技术点说法:
第三方应用接收到认证的request token后,再次向SNS账号服务发起一次HTTP请求,以换取access token。
SNS 账户授权服务接收请求,验证是否合法。如果合法,则返回一个access token。
从上面的步骤可以看出,用户始终没有将其用户名与密码等信息提供给使用者(第三方软件),从而更安全。
OAUTH相关术语
明白了流程,再看技术术语就会简单很多。在上面流程中,在更技术说法中提到了一些术语,这些OAuth的术语解释如下:
OAUTH相关的三个URL:
- Request Token URL: 获取未授权的Request Token服务地址;
- User Authorization URL: 获取用户授权的Request Token服务地址;
- Access Token URL: 用授权的Request Token换取Access Token的服务地址;
OAUTH相关的参数定义:
- oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。如Yahoo该值的注册地址为:https://developer.yahoo.com/dashboard/
- oauth_consumer_secret:oauth_consumer_key对应的密钥。
- oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
- oauth_signature: 用上面的签名方法对请求的签名。
- oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
- oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。
- oauth_version: OAUTH的版本号,可选,其值必须为1.0。
OAUTH HTTP响应代码:
- HTTP 400 Bad Request 请求错误
- Unsupported parameter 参数错误
- Unsupported signature method 签名方法错误
- Missing required parameter 参数丢失
- Duplicated OAuth Protocol Parameter 参数重复
- HTTP 401 Unauthorized 未授权
- Invalid Consumer Key 非法key
- Invalid / expired Token 失效或者非法的token
- Invalid signature 签名非法
- Invalid / used nonce 非法的nonce
参考资料:
OAuth
http://en.wikipedia.org/wiki/OAuth
Developer's Guide: Data API Protocol – OAuth for Web Applications
http://code.google.com/intl/zh-CN/apis/youtube/2.0/developers_guide_protocol_oauth.html
OAUTH协议简介
http://blog.csdn.net/hereweare2009/archive/2009/03/08/3968582.aspx
An OAuth library for .NET consumers and service providers
http://code.google.com/p/oauth-dot-net/
OAuth不断获得动力
http://www.infoq.com/cn/news/2008/06/oauth_spring
豆瓣 API OAuth认证
http://www.douban.com/service/apidoc/auth
OAuth Use Case
http://wiki.opensocial.org/index.php?title=OAuth_Use_Cases