14
Koubei F2E 竹笋 2009.12.14

Banquet 13

Embed Size (px)

Citation preview

Page 1: Banquet 13

Koubei F2E 竹笋

2009.12.14

Page 2: Banquet 13

跟踪报道甲骨文今年早些时候斥资74亿美元收购了Sun。但欧盟委员会目前正在对该交易进行审查。Sun的主要业务是服务器和Java,该公司同时拥有开源数据库软件MySQL。

由于存在竞争关系,因此甲骨文收购Sun后会对免费开源软件MySQL的发展不利。

甲骨文周一共做出了10项承诺,包括对外公布使用MySQL所需的编程细节,另外,在第三方开发者使用这些细节信息与MySQL进行交互时,甲骨文会放弃相应的版权主张。

MySQL创始人迈克尔-维德纽斯(Michael Widenius)发起一项互联网运动,倡议MySQL用户通过电子邮件向欧盟表达对该交易的观点:终止甲骨文收购Sun的交易或要求甲骨文修改有关MySQL条款。

2001年创建MySQL, 2008年1月SUN以10亿美元收购MySQL,当年12月MySQL推出5.1,对此维德纽斯表示不满,认为该版本尚不成熟,2009年初从SUN辞职,创办Monty Program Ab软件公司。

Page 3: Banquet 13

若要人不知除非己莫 为

Google已经在信息业接近美国中央情报局的梦想——了解你的一切的一切。

Google承诺,视用户个人隐私为最高责任,决不提供给第三方。

Google首席执行官Eric Schmidt近日却发表了一些让人寒心的话语,在接受CNBC(美国全国广播公司 财经频道)采访时,Schmidt谈到了用户浏览数据的隐私问题,他说:“ 如果你有什么事是不想让任何人知道的,那么当初你就不应该去做。 ”

补充:我们(搜索引擎)在美国都会遵守《爱国者法》。也就是说政府机构是有权获取这些信息。

WebKit:HTML5中链接支持rel属性为“noreferrer”,可以使通过连接访问网站时让该网站不知道该次访问的来源信息。

Page 4: Banquet 13

ECMAScript版本5获得批准

负责JavaScript、JScript(微软)和ActionScript (Adobe)标准的行业协会Ecma的技术委员会以21票有19票赞同通过了ECMAScript version 5。

其中投反 对票的是两大巨头IBM和Intel。IBM反对的理由是浮点处理缺乏精确性,而Intel反对则仅仅是因为没有足够时间检查潜在的知识产权牵连问题。

http://www.ecmascript.org/docs/tc39-2009-043.pdf

Page 5: Banquet 13

事件驱动程式设计事件驱动程式设计(英语:Event-driven programming)是一种电脑程式设计模型。这种模型的程式执行流程是由使用者的动作(如鼠标的按键,键盘的按键动作)或者是由其他程式的讯息来决定的。

相对于批次程序设计:程式执行的流程是由程式设计师来决定。批次的程式设计在初级程式设计教学课程上是一种方式。

Gartner在2003年引入了一个新 术语事件驱动架 构(Event Driven Architecture,EDA), 主要用于描述一种基于事件的范例。

优点:EDA 应用的系统里, 事件所触发的消息可以在独立的、非耦合的组件和服务之间传递,这些模块彼此并不知晓对方。极大地改进了表面 上毫无关联事件的能力。通过提供瞬时过滤、聚合和关联事件的能力,EDA可以快速地检测出事件并判断它的类型,从而帮助组织机构快速、恰当地响应和处理这 些事件。通常事件可以采用发布/订阅机制。

Page 6: Banquet 13

事件驱动架构的主要内容事件: 在信息化系 统中,事件是一些事物对象的状态属性,也可以是事物之间动作的记录。事件源: 产生事件的模块。即接口定义中有Action out的模块产生事件。事件监听者: 接收并处理事件的模块。即接口定义中有Action in的模块接收事件,然后处理事件。事件的处理:事件的处理通常使用声明型语言描述,即描述满足一定条件下,对操作对象执行什么处理的规则。多条规则组成一个规则集,在运行时由规则引擎来判定执行规则的顺序,执行相应的规则。

Page 7: Banquet 13

普通函数与事件回调函数

如果我们把系统划分为两层:低层的函数库和高层的应用程序。同样作为主函数的辅助函数,左图中的普通函数直接被主函数调用,然而右图中的回调函数却是通过库函数间接被主函数调用的。

一方面,在 软件模块分层中,低层模块为高层模块提供服务,并且不能依赖高层模块,以保证其可重用性;另一方面,通常被调者(callee)为调用者(caller)提供服务,调用者依赖被调者。两相结合,决定了低层模块多为被调者,高层模块多为调用者。但这种惯例并不总是合适的——低层模块为了追求更强的普适性和可扩展性,有时也有调用高层模块的需求,于是便邀callback前来相助。

Page 8: Banquet 13

上图为一个典型的事件驱动式模型。事件处理器事先在关注的事件源上注册,后者不定期地发表事件对象,经过事件管理器的转化(translate)、合并(coalesce)、排队(enqueue)、分派(dispatch)等集中处理后,事件处理器接收到事件并对其进行相应处理。请注意事件处理器随时可以注册或注销事件源,意味着二者之间的关系是动态建立和解除的。

Page 9: Banquet 13

SOA与事件驱动架构的关系

SOA(Service-Oriented Architecture)即面向服 务的体系结构,SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。

局限性: SOA要求 应用程序知道有什么服务和如何与这些应用程序互动。它还意味着除非一个应用程序提出一个服务请求,否则什么事情都不会发生。采用请求-回应范 例,每一个服务都必须知道需要通知哪一个其它的服务发生了什么事情。

Page 10: Banquet 13

事件驱动的SOA

虽然 SOA通常更适合请求/响应交换环境,但EDA 引入了一些长时间运行的异步进程功能。而且,EDA 节点可发布事件,且并不依赖于所发布的服务的可用性。它真正地实现了同其他节点的分离。

应用方向:事件驱动架构(EDA)是分布式应用程序的普遍架构形式,非常典型的是:分布式应用程序都被设计成为模块化的、封装的、可共享事件服务的组件。能够通过应用程序、适配器以及无入侵性的代理操作来创建这些服务。

Page 11: Banquet 13

JS中的事件驱动机制

事件是Dom(文档 对象模型)的一部分。Level1中没有;Level2支持了小部分;Level3中规定完整的事件。

IE 4:冒泡;Netscape Navigator 4:捕 获

Dom同时支持两种事件模型。

var el = document.getElementById(‘btn’);if (document.all){el.fireEvent('onclick');}else{var evt = document.createEvent("HTMLEvents");// 冒泡,阻止默认操作evt.initEvent("click", true, true);el.dispatchEvent(evt);}

Page 12: Banquet 13

YUI中的自定义事件

var eventObj = new YAHOO.util.CustomEvent("CalendarSelectEvent");eventObj.fire(arguments); eventObj.subscribe(function(type,data){alert(type);alert(data);},obj);

eventObj .signature 可设为YAHOO.util.CustomEvent.LIST (默认)param1 :event name;param2 :fire方法中的参数组;param3 :subscribe方法中传入的第二参数;YAHOO.util.CustomEvent.FLAT ,param1 : fire方法中的第一参数;(多个时用数组)param2 : subscribe方法中传入的第二参数;

关键属性:subscribers:监听者队列( YAHOO.util.Subscriber对象数组)Subscriber对象构造需要的参数(fn,obj,overrideContext);Subscribers[i].fn.call(scope,this.type,args,subscribers[i].obj)Subscribers[i].fn.call(scope,param,subscribers[i].obj)

Page 13: Banquet 13

Q&A

Page 14: Banquet 13

THX