asp的application和session对象体现了其他asp内置对象所没有的特征–事件。每一个访客访问服务器时都会触发一个 onstart事件(第一个访客会同时触发application和session的onstart事件,但application先于 session),每个访客的会话结束时都会触发一个onend事件(最后一个访客会话结束时会同时触发application和session的 onend事件,但session先于application)。
onstart和onend这两个事件一般应用在虚拟社区中统计在线人数、修改用户的在线离线状态等。要具体定义这两个事件,需要将代码写在 global.asa文件,并将该文件放在站点的根目录下(缺省是\inetpub\wwwroot\)。另外,application和session 对象规定了在onend事件里除了application对象外其他asp内置对象(response、request、server、 session…)一概不能使用。以下举一个虚拟社区统计在线人数的例子来说明如何使用这两个事件。
文件说明:
global.asa 位于d:\inetpub\wwwroot\目录下
default.asp 位于d:\inetpub\wwwroot\目录下,虚拟社区登录页面
login.asp 位于d:\inetpub\wwwroot\目录下,用于检测用户输入的用户名及密码
index.asp 位于d:\inetpub\wwwroot\目录下,虚拟社区首页
bbs.mdb 位于d:\inetpub\wwwroot\目录下,存储用户信息的数据库
数据库(access)结构:
===bbs表===
id 用户id,长整型
name 用户名,文本型
code 密码,文本型
online 在线状态,是/否
===global.asa===
<script language=”vbscript” runat=”server”>
sub application_onstart
application(“online”)=0
end sub
sub application_onend
nd sub
sub session_onstart
end sub
sub session_onend
if session.contents(“pass”) then 判断是否为登录用户的session_onend
application.lock
application(“online”)=application(“online”)-1
application.unlock
end if
end sub
</script>
==============
===login.asp===
……密码验证,连接数据库,检测用户输入的用户名及密码是否正确
if 密码验证通过 then
session(“name”)=rs(“name”)
session(“id”)=rs(“id”)
session(“pass”)=true
else
rs.close
conn.close
response.write “密码错误!”
response.end
end if
application.lock
application(“online”)=application(“online”)+1
conn.execute (“update bbs set online=1 where id=”&session(“id”))将用户的状态设为在线
application.unlock
rs.close
conn.close
response.redirect “index.asp” 初始化数据后跳转到社区首页
===========
在本例中,用application(“online”)变量记录已经登录社区的在线人数,因为一旦有用户访问服务器而不管用户是否登录,都会产生onstart事件,所以不能在onstart事件里使applicaiton(“online”)加一。因为不管是否是登录用户的会话结束都会产生onend事件(假如有访客访问了服务器但并不登录社区,他的会话结束后也会产生onend事件),所以在session_onend事件里用了句if 语句来判断是否为已登录用户的onend事件,如果是才将在线人数减一。
这只是一个统计在线人数的简单例子,对于一个完整的虚拟社区来说,仅仅统计有多少人在线是不够的,在本例中数据库里有个online字段是用来记录用户的在线状态,用户登录的时候,在login.asp里将online设为1,但用户离线时并没有将online设为0,要完善它,就要修改一下 session_onend事件,在该事件里将online设为0。
===global.sas===
<script language=”vbscript” runat=”server”>
sub application_onstart
application(“online”)=0
set application(“conn”)=server.createobject(“adodb.connection”)
application(“db”)=server.mappath(“\bbs.mdb”) 此处最好使用绝对路径\bbs.mdb,下文有详细介绍
end sub
sub application_onend
set application(“conn”)=nothing
end sub
sub session_onstart
end sub
sub session_onend
if session.contents(“pass”) then 判断是否为登录用户的session_onend
application(“con”).open =”driver={microsoft access driver (*.mdb)};dbq=”&application(“db”)
application.lock
application(“online”)=application(“online”)-1
application(“con”).execute (“update friends set online=0 where id=”&session.contents(“id”))
application.unlock
application(“con”).close
end if
end sub
</script>
==============
至此,完整的代码已经完成了。因为在application和session的onend事件里不能使用server对象,所以要将数据库的连接及数据库在服务器上的物理地址(d:\inetpub\wwwroot\bbs.mdb)存储在application变量中,并在 application_onstart事件中预先处理。同理,在session_onend事件中不能用session(“pass”)来代替 session.contents(“pass”)(以下有详尽说明)。
四、本文实例中值得引起注意的两点
⒈onend事件里的session.contents
刚开始接触global.asa的朋友经常会将上面session_onend事件里的
if session.contents(“pass”) then 写成
if session(“pass”) then,
这样的话系统不会提示错误,但是永远也不会执行then后面的内容,这是因为在onend事件里禁止使用session对象,但是可以用 session对象的集合来调用session变量。因为iis并没提示任何错误信息,所以笔者曾经在这上面浪费了很多时间。在此希望大家引以为鉴!
⒉application_onstart事件里用server.mappath获取数据库的物理地址时应使用绝对地址为了说明这个问题,大家可以做个实验:将上面application_onstart事件里的
application(“db”)=server.mappath(“\bbs.mdb”)改为:
application(“db”)=server.mappath(“bbs.mdb”)
然后在d:\inetpub\wwwroot\目录下建立一个test子目录,写一个temp.asp在test目录里。
====test.asp====
<%response.write application(“db”)%>
================
再将temp.asp拷贝一份放在根目录下(d:\inetpub\wwwroot\)。用记事本打开global.asa,再打开两个浏览器,浏览器a输入地址http://localhost/temp.asp,按回车,将在浏览器上输出:
d:\inetpub\wwwroot\bbs.mdb
然后,在记事本的窗口上点”文件”菜单,选”保存”(使global.asa的修改时间改变,从而使iis重启动所有服务),再在浏览器b输入地址http://localhost/test/temp.asp,按回车,在浏览器上输出的是:
d:\inetpub\wwwroot\test\bbs.mdb
global.asa文件虽然是放在站点根目录下,但是如果在server.mappath中使用的是相对地址,而触发 application_onstart事件的用户第一次访问的页面又不是属于根目录的话,得到数据库的物理地址将不会是期望的结果,希望大家要特别小心。
文章整理:西部数码–专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
[SOA]SOA新一代语言Einstein
Einstein是一门针对分布式SOA复杂环境而设计的语言,它建立在以下主要原则基础之上:
* 分布式:Einstein被设计成允许(潜在的)每条指令可以在彼此分离的机器上执行。接下来由用户决定代码中实际期望的分布式和并发性的程度。
* 事件驱动:Einstein是一门基于流程的编程语言,各条指令通过消息进行通信。
* 并发性友好:在创建时,Einstein就考虑支持并发性;它使用一组经过验证的避免共享状态的技术(消息传递、只读元组等),具备运行时感知的线程安全性。
* 适当的复杂性:Einstein采用了一些包括资源和模型在内的简单技术来减少实现分布式系统的复杂性。
* 代替各种技术:Einstein 意在解决过去用来进行多系统集成的技术过多问题。目前,在构建一个资源交叉(cross-resource)系统时,我们常常依赖ESB、网格技术、分布式状态系统、协调技术(如BPEL)和工作流等技术。Einstein被设计成一种代替所有这些技术的工具。
Einstein的语言基于以下概念:
* 资源,与变量极为相似,但是一般是粗粒度的。资源使用URI来访问。资源可被描述成不稳定(可安全用于多线程访问)、局部(不打算用于多节点访问或串行化)和幂等(接收一条消息多次的效果和只接受其一次的效果相同)。
* 提供者,为任何资源接收、传送、执行、查询、路由或以某种方式处理消息提供了一致接口。一个提供者可被分成3个组件:ResourceProvider(扮演一个资源工厂),Resource(实现)和Facades(一个资源为其所提供功能暴露的简单粗粒度接口视图)。提供者被自动加载进Einstein注册中心,中心包含了与所有可用资源和提供者相关的信息。
* 消息是Einstein资源间交换数据的主要机制。一条消息的有效负荷包括一个数据对象而非一个语言对象,它允许多种数据格式(如XML、对象图、CSV文件等)与Einstein进行交互。
* 执行组,包括流程执行组(顺序执行、类似编配语言中的sequence)、元组执行组(并行执行,类似编配语言中的fork/join)、组合执行组(与元组类似,但是至少有一个分支结束时即结束)和映射执行组(以上组的结合)。
http://einstein.codecauldron.org/tw/tiki-index.php?page=DownloadPage
[教程]X3D教程1
目录:
第一讲 X3D概述及安装配置
本讲主要讲述X3D的概述、X3D的编辑器及其安装配置。
一、 X3D的概述
“Web3D”一词出自Web3D联盟(Web3D Consortium (W3DC)),其前身是VRML联盟。该组织先后提出了VRML1.0 ,VRML2.0和VRML97 规范。VRML规范支持纹理映射、全景背景、雾、视频、音频、对象运动、和碰撞检测。但由于网络瓶颈、用户需求以及本身技术等原因,VRML技术的进展远 没有达到预期。
1998年VRML联盟改名为Web3D联盟,年底提出新的标准X3D(Extensible 3D),又称为VRML200x 规范。2000年春,Web3D 联盟完成了VRML到X3D的转换。X3D整合正在发展的可扩展标记语言(Extensible Markup Language ,简称XML )、JAVA、流技术等先进技术,包括了更强大、更高效的3D计算能力、渲染质量和传输速度。
所谓X3D标准就是XML标准与3D标准的有机结合,X3D被定义为可交互操作,可扩展,跨平台的网络3D内容标准。
X3D 是 VRML的继承。VRML(Virtual Reality Modeling Language – 虚拟现实建模语言)是原来的网络3D图形的ISO标准(ISO/IEC 14772)。X3D 相对VRML改进,提供了以下的新特性:
1、3D 图形 – 多边形化几何体、参数化几何体、变换层级、光照、材质、多通道/多进程纹理帖图
2、2D 图形 – 在3D变换层级中显示文本、2D矢量、平面图形
3、动画 – 计时器和插值器驱动的连续动画;人性化动画和变形
4、空间化的音频和视频 – 在场景几何体上映射视听源
5、用户交互 – 基于鼠标的选取和拖曳;键盘输入
6、导航 – 摄像机;用户在3D场景中的移动;碰撞、接近和可见性检测
7、用户定义对象 – 通过创建用户定义的数据类型,可以扩展浏览器的功能
8、脚本 – 通过程序或脚本语言,可以动态的改变场景
9、网络 – 可以用网络上的资源组成一个单一的X3D场景;可以通过超链接对象连接到其他场景或网络上的其他资源
10、物理模拟 – 人性化动画;地理化数据集;分布交互模拟(Distributed Interactive Simulation – DIS)协议整合
在2002年3月份 X3D 第一版发布以来,已经有基于Java的源码开放的网络3D软件问世。因此,Web3D联盟在制定标准时成立了Java 语言翻译工作小组以便允许Java 程序能够与新的3D标准程序相协调。这也最终结束与Sun的网络3D技术Java3D technology 之间的冲突。
Web3D联盟计划于2003年10月份向国际标准组织提请标准申请,x3D将正式成为国际通用标准。
[教程]SQL注入攻击的种类和防范手段
观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的。虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施。
SQL注入攻击的种类
知彼知己,方可取胜。首先要清楚SQL注入攻击有哪些种类。
1.没有正确过滤转义字符
在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。比方说,下面的这行代码就会演示这种漏洞:
statement := “Select * FROM users Where name = '” + userName + “'; ”
这种代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是代码的作者所期望的那样了。例如,将用户名变量(即username)设置为:
a' or 't'='t,此时原始语句发生了变化:
Select * FROM users Where name = 'a' or 't'='t';
如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值't'='t永远是正确的。
在一些SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。下面语句中的username的值将会导致删除“users”表,又可以从“data”表中选择所有的数据(实际上就是透露了每一个用户的信息)。
a'; Drop TABLE users; Select * FROM data Where name LIKE '%
这就将最终的SQL语句变成下面这个样子:
Select * FROM users Where name = 'a'; Drop TABLE users; Select * FROM DATA Where name LIKE '%';
其它的SQL执行不会将执行同样查询中的多个命令作为一项安全措施。这会防止攻击者注入完全独立的查询,不过却不会阻止攻击者修改查询。
2.Incorrect type handling
如果一个用户提供的字段并非一个强类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。例如:
statement := “Select * FROM data Where id = ” + a_variable + “; ”
从这个语句可以看出,作者希望a_variable是一个与“id”字段有关的数字。不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。例如,将a_variable设置为:1; Drop TABLE users,它会将“users”表从数据库中删除,SQL语句变成:Select * FROM DATA Where id = 1; Drop TABLE users;
3.数据库服务器中的漏洞
有时,数据库服务器软件中也存在着漏洞,如MYSQL服务器中mysql_real_escape_string()函数漏洞。这种漏洞允许一个攻击者根据错误的统一字符编码执行一次成功的SQL注入式攻击。
4.盲目SQL注入式攻击
当一个Web应用程序易于遭受攻击而其结果对攻击者却不见时,就会发生所谓的盲目SQL注入式攻击。有漏洞的网页可能并不会显示数据,而是根据注入到合法语句中的逻辑语句的结果显示不同的内容。这种攻击相当耗时,因为必须为每一个获得的字节而精心构造一个新的语句。但是一旦漏洞的位置和目标信息的位置被确立以后,一种称为Absinthe的工具就可以使这种攻击自动化。
5.条件响应
注意,有一种SQL注入迫使数据库在一个普通的应用程序屏幕上计算一个逻辑语句的值:
Select booktitle FROM booklist Where bookId = 'OOk14cd' AND 1=1
这会导致一个标准的面面,而语句
Select booktitle FROM booklist Where bookId = 'OOk14cd' AND 1=2在页面易于受到SQL注入式攻击时,它有可能给出一个不同的结果。如此这般的一次注入将会证明盲目的SQL注入是可能的,它会使攻击者根据另外一个表中的某字段内容设计可以评判真伪的语句。
6.条件性差错
如果Where语句为真,这种类型的盲目SQL注入会迫使数据库评判一个引起错误的语句,从而导致一个SQL错误。例如:
Select 1/0 FROM users Where username='Ralph'。显然,如果用户Ralph存在的话,被零除将导致错误。
7.时间延误
时间延误是一种盲目的SQL注入,根据所注入的逻辑,它可以导致SQL引擎执行一个长队列或者是一个时间延误语句。攻击者可以衡量页面加载的时间,从而决定所注入的语句是否为真。
以上仅是对SQL攻击的粗略分类。但从技术上讲,如今的SQL注入攻击者们在如何找出有漏洞的网站方面更加聪明,也更加全面了。出现了一些新型的SQL攻击手段。黑客们可以使用各种工具来加速漏洞的利用过程。我们不妨看看the Asprox Trojan这种木马,它主要通过一个发布邮件的僵尸网络来传播,其整个工作过程可以这样描述:首先,通过受到控制的主机发送的垃圾邮件将此木马安装到电脑上,然后,受到此木马感染的电脑会下载一段二进制代码,在其启动时,它会使用搜索引擎搜索用微软的ASP技术建立表单的、有漏洞的网站。搜索的结果就成为SQL注入攻击的靶子清单。接着,这个木马会向这些站点发动SQL注入式攻击,使有些网站受到控制、破坏。访问这些受到控制和破坏的网站的用户将会受到欺骗,从另外一个站点下载一段恶意的JavaScript代码。最后,这段代码将用户指引到第三个站点,这里有更多的恶意软件,如窃取口令的木马。
以前,我们经常警告或建议Web应用程序的程序员们对其代码进行测试并打补丁,虽然SQL注入漏洞被发现和利用的机率并不太高。但近来攻击者们越来越多地发现并恶意地利用这些漏洞。因此,在部署其软件之前,开发人员应当更加主动地测试其代码,并在新的漏洞出现后立即对代码打补丁。
防御和检查SQL注入的手段
1.使用参数化的过滤性语句
要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。下面是一个使用Java和JDBC API例子:
PreparedStatement prep = conn.prepareStatement(“Select * FROM USERS Where PASSWORD=?”);
prep.setString(1, pwd);
总体上讲,有两种方法可以保证应用程序不易受到SQL注入的攻击,一是使用代码复查,二是强迫使用参数化语句的。强迫使用参数化的语句意味着嵌入用户输入的SQL语句在运行时将被拒绝。不过,目前支持这种特性的并不多。如H2 数据库引擎就支持。
2.还要避免使用解释程序,因为这正是黑客们借以执行非法命令的手段。
3.防范SQL注入,还要避免出现一些详细的错误消息,因为黑客们可以利用这些消息。要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。
4.使用专业的漏洞扫描工具。但防御SQL注入攻击也是不够的。攻击者们目前正在自动搜索攻击目标并实施攻击。其技术甚至可以轻易地被应用于其它的Web 架构中的漏洞。企业应当投资于一些专业的漏洞扫描工具,如大名鼎鼎的Acunetix的Web漏洞扫描程序等。一个完善的漏洞扫描程序不同于网络扫描程序,它专门查找网站上的SQL注入式漏洞。最新的漏洞扫描程序可以查找最新发现的漏洞。
5.最后一点,企业要在Web应用程序开发过程的所有阶段实施代码的安全检查。首先,要在部署Web应用之前实施安全测试,这种措施的意义比以前更大、更深远。企业还应当在部署之后用漏洞扫描工具和站点监视工具对网站进行测试。
Web安全拉警报已经响起,安全形式异常严峻,企业绝对不应当草率从事。安全重于泰山!
[文档]Facebook 海量数据处理
图片规模
作为世界上最大的 SNS 站点之一,Facebook 图片有多少? 65 亿张原始图片,每张图片存为 4-5 个不同尺寸,这样总计图片文件有 300 亿左右,总容量 540T,天! 峰值的时候每秒钟请求 47.5 万个图片 (当然多数通过 CDN) ,每周上传 1 亿张图片。
图片存储
前一段时间说 Facebook 服务器超过 10000 台,现在打开不止了吧,Facebook 融到的大把银子都用来买硬件了。图片是存储在 Netapp NAS上的,采用 NFS 方式。
图片写入

尽管这么大的量,似乎图片写入并不是问题。如上图,是直接通过 NFS 写的。
图片读取

CDN 和 Cachr 承担了大部分访问压力。尽管 Netapp 设备不便宜,但基本上不承担多大的访问压力,否则吃不消。CDN 针对 Profile 图象的命中率有 99.8%,普通图片也有 92% 的命中率。命中丢失的部分采由 Netapp 承担。
图中的 Cachr 这个组件,应该是用来消息通知(基于调整过的 evhttp的嘛),Memcached 作为后端存储。Web 图片服务器是 Lighttpd,用于 FHC (文件处理 Cache),后端也是 Memcached。Facebook 的 Memcached 服务器数量差不多世界上最大了,人家连 MYSQL 服务器还有两千台呢。
Haystacks –大海捞针
这么大的数据量如何进行索引? 如何快速定位文件? 这是通过 Haystacks 来做到的。Haystacks 是用户层抽象机制,简单的说就是把图片元数据的进行有效的存储管理。传统的方式可能是通过 DB 来做,Facebook 是通过文件系统来完成的。通过 GET / POST 进行读/写操作,应该说,这倒也是个比较有趣的思路,如果感兴趣的话,看一下 GET / POST 请求的方法或许能给我们点启发。

总体来看,Facebook 的图片处理还是采用成本偏高的方法来做的。技术含量貌似并不大。不清楚是否对图片作 Tweak,比如不影响图片质量的情况下减小图片尺寸。
[杂记]Vs2008将支持ASP.net MVC framework
下一版本的Vs2008将支持ASP.NET MVC,看来beta了这么长时间ASP.NET MVC框架终于要正式发布了,期待吧,原文转自:http://weblogs.ASP.NET/scottgu/archive/2008/06/01/asp-net-mvc-support-with-visual-web-developer-2008-express.aspx
Last week I blogged about the ASP.NET MVC Preview 3 release. One important thing I forgot to mention about this release is that you can now use it with both Visual Studio 2008 as well as the free Visual Web Developer 2008 Express edition.
The SP1 release of Visual Web Developer 2008 Express adds support for both class library projects as well as web application projects (previously only web site projects could be used with it). This new support is useful in itself, as well as in enabling both ASP.NET MVC and Silverlight project support with VWD Express. If you install the Visual Web Developer Express SP1 Beta you can start using ASP.NET MVC Preview 3 with it immediately.
Important: ASP.NET MVC Preview 3 does not require SP1 to be installed if you are using Visual Studio 2008. ASP.NET MVC Preview 3 will work with both VS 2008 and VS 2008 SP1 just fine.
You can learn more about the new VWD Express support for ASP.NET MVC from the VS Web Tools team blog here. This post also includes a free web download that provides ASP.NET MVC Test project support for NUnit-based unit tests. You can use these NUnit project templates with both Visual Studio 2008 as well as with Visual Web Developer Express 2008.
Hope this helps,
Scott
[资源]AS3学习站
gskinner 含AS3源码和教程 推荐一下
[视频]比尔.盖茨退休了
微软董事长比尔·盖茨(Bill Gates)将于本周五(6月27日,美国当地时间)正式退出公司日常管理工作,以把精力专注于慈善事业.在过去30多年的职业生涯中,虽然盖茨曾与硅谷 IT名流们结下了诸多“恩怨情仇”,但在盖茨临别之际,众多硅谷知名人士仍忍不住主动向盖茨告别,并祝愿他今后在慈善事业上取得新成就.以下就是14名美国IT界知名人士致盖茨离别语(其中包括微软数名高管,排名不分先后,仅为方便阅读):
1、斯科特·麦克尼利(Scott McNealy),服务器制造商Sun董事长:
“我祝愿他今后的事业一帆风顺.我认为他聪明之极.好在他与我本人倒没有什么大冲突,但他确实取得了诸多成就.我觉得他今后的工作担子仍然很重.我愿意看到由他本人来管理盖茨基金会,而不是交给他人看管.我一直认为,对于事业成功的企业家来说,如果他们看到自己的财富被人任意挥霍一空,估计他们至死也不会安宁.”
在被问及是否会想念盖茨时,麦克尼利说:“如果我想念他,也不会有人因此给我点钱用;不过我倒是拿不准他是否会想念我.”
2、史蒂夫·乔布斯(Steve Jobs),苹果首席执行官:
“对微软来说,盖茨引退是一件大事.作为引人注目的退休事件,我个人认为,盖茨此前作出了巨大贡献,他理应受到人们的尊敬.”
3、迈克尔·戴尔(Michael Dell),PC制造商戴尔创始人兼首席执行官:
“在推动标准化计算和新一轮生产力事宜上,盖茨独特的创新能力和远见成为了关键因素.我个人认为,在促使计算机深入到人们日常生活过程中,我们很难找到比盖茨影响力更大的人.”
“对于盖茨的敬业精神,我个人一直非常钦佩.正是盖茨使企业家个人形象更有亲和力.他不仅是一名技术梦想家,同时也是一位商业战略家.多年以来,盖茨向我们展示了他的执着精神,并推动了包括技术创新、公开政策等因素在内的IT产业发展进程.”
“盖茨是屈指可数且已经改变了世界的IT业界领袖之一,正是他使得技术得以普及,从而使这些技术能够被更多人使用.目前我们之所以能开发出改变业界形势的新技术,部分就要归功于盖茨及其微软团队已经建立的良好基础.”
“我个人认为,盖茨最具持续性的贡献无疑将是盖茨基金会.比尔和梅琳达给予了我们诸多人生启示,他们投入大量精力和拿出上亿美元,目的是为了解决全球正面临的最棘手难题.”
“我认为,盖茨仍将一如既往地投入工作.如果非要说有什么不同,那只能说盖茨将把多年投入微软的精力转移到盖茨基金会中,并将更加努力地工作.我们将对此随时加以关注.”
4、马克·库班(Mark Cuban),HDNet和达拉斯小牛队老板,Broadcast.com前首席执行官:
“毫无疑问,盖茨的从业生涯谱写了自己人生传奇,他对世界的巨大影响,其实远高于人们的想像.尽管盖茨留下了许多精彩的故事,但是我最喜爱的那一个,可能连盖茨也不知道.而我自己也曾参与其中.”
“上个世纪80年代初期,Comdex不但为业界会议,而且还是科技人士的休闲聚会活动.在当时举行的一次聚会期间,我正在和几位女孩跳舞.这时她们的一个朋友突然跑来说,得马上离开,去见一位名叫比尔·盖茨的家伙,而他的个人财富高达6000万美元.”
“这是个真实的故事.盖茨,谢谢你给了我努力工作的动机.”
5、米歇尔·柯兹曼(Mitchell Kertzman),Hummer Winblad公司风险投资家:
“我个人猜想,在相对遥远的未来,即使已经没有人记得盖茨本人,及他在微软的角色,所有人仍然会知道盖茨基金会,并了解该基金会对世界所作出的巨大贡献.”
“如果盖茨能够在基金会中投入同样多精力、决心和执着精神,那么他将成为历史上最伟大、永远被人想念的英雄人物之一.盖茨的慈善工作是一个全新领域,我们都将支持盖茨战胜他的新'竞争者'——疾病、愚昧和贫困.”
6、菲利普·卡恩(Philippe Kahn),FullPower科技公司首席执行官,Borland软件公司创始人:
“尽管美国IT产业正由PC时代向苹果iPhone手机和Google时代转变,但盖茨为我们留下了历久弥新的精神财富.”
7、比尔·维特(Bill Veghte),微软在线服务和Windows商务集团高级副总裁:
“我从盖茨身上学到很多有益的东西,而树立雄心壮志是其关键.在这个问题上,盖茨将这样说:'当你考虑某一个问题时,千万不要从数百万的级别去考虑它,而是应该从数亿的级别去考虑.'”
“其次,我认为非常重要、非常有启发意义的一点是:很多人在一生中获得了大量钱财、权力,亦或是在政治和体育领域取得巨大成就.但是对他们来说,这些钱财和权力是否腐蚀了他们的灵魂?”
“有一次,我们曾经开会讨论搜索业务,参与者只有盖茨、我本人以及少数微软高管.在会议过程中,盖茨像我们一样充满热情,他能全面考虑到所有问题.实际上,他本来根本没有必要参加这一会议.”
“要说盖茨对我最有启发的一点是,即使他已经做了很多工作,他的追求、热忱和乐观精神却从未消退过.他支配自己精力、钱财和技能的独特方式值得我们学习.”
8、乔治·科朗尼(George Colony),知名市场研究公司Forrester Research首席执行官:
科朗尼在一则博客中表示:“所谓'建设性垄断'观念,应当是盖茨留给我们的最重要遗产.他并不是技术创新者.以客气点的方式来说,我们可将他称作技术'推广者';如果用不客气的方式,那他就是技术'剽窃者'.盖茨是一个商业模式创新者,但称不上技术创新者.”
“回首过去,盖茨'建设性垄断'看法与发明家托马斯·爱迪生的观念相类似.两者都通过多种方式创造出优秀技术,并使这些新技术能被更多用户使用.尼科拉· 泰斯拉(Nikola Tesla,美国发明家)和史蒂夫·乔布斯(Steve Jobs,苹果首席执行官)则可视为同一枚硬币的反面.”
9、罗伯特·迈特卡尔夫(Robert Metcalfe),以太网发明者,网络设备制造商3COM创始人:
“盖茨是个了不起的人.他非常聪明.尽管我曾经激烈地批评过他,但盖茨并不是一个恶魔.我所发表的第一篇专栏文章,就是批评微软的垄断行为.文章当时发表在美国《计算机世界》(Computer World)杂志上.我也因此开始了自己的记者生涯,时间是1991年2月25日.”
“我当时所主持的专栏名为《观点》,而文章标题为《微软是否在滥用自己的权力?》.在此之后,我对微软的垄断问题提出了尖锐批评,因为早在1991年时,我就发现了微软的垄断行为.微软当时推出了Pen Windows产品,目的就是挤垮Go公司.”
“但无论如何,盖茨仍然身如天神.如果注定有人要成为全球首富,那么盖茨无疑是最佳人选.”
10、丹·布里克林(Dan Bricklin),VisiCalc开发者,Software Garden和Trellix创始人兼总裁:
“他对于业界许多事物都具有极大参与勇气.只要是科技活动,他就会前来,并当众展示自己才能.如果你并不是绝顶高手,却执意要在众目睽睽之下显山露水,这的确需要勇气.但盖茨却成功做到了这点.他做了大量对微软来说必须参与的工作.盖茨愿意成为软件产业面向其他领域的代言人,这让我感到非常钦佩.”
“至今我还记得,我曾经参加过一次微软会议.这一会议似乎是关于Pen计算机技术,他们邀请了很多与会者.会议最后在盖茨家中结束,我们可以在盖茨家中自由穿梭……如果换了我,打死我也不会这样做.”
“盖茨愿意为自己所处领域贡献力量,这足以令人印象深刻.此外,盖茨工作十分努力,能够把握自己所做的工作,并把自己所得返还给社会,这为他人树立了优秀榜样.我很高兴盖茨做到这一点,我祝愿他天天心情愉快.”
11、史蒂夫·鲍尔默(Steve Ballmer),微软首席执行官:
鲍尔默在接受美国《新闻周刊》采访时表示:“他不仅仅是比尔·盖茨,他是与众不同的比尔·盖茨.他创建了微软,积累了财富,组建了基金会,并获得了声誉.其他人很难取得他这样的成就.”
“此外,与公司所有技术人员一样,盖茨也在实践中不断成长.盖茨记忆力比我所知的任何人都好.盖茨能涉及如此广阔的领域,像他这样的人我们今后恐怕很难再碰到.”
12、克雷格·穆迪(Craig Mundie),微软研究与策略首席主管:
“在我加盟微软时,所做的一切工作其实都与PC无关.我还记得与盖茨的谈话.他当时表示,'如果我们能够弄明白如何为这些东西编程,那我们肯定能从中赚钱.'这就体现了他的远见卓识,他敢于为自己的直觉下大赌注.”
“我认为,微软到目前所取得的巨大成就,其实都是基于盖茨从长期发展所下的大赌注.自我加盟微软后,就一直能体会盖茨在应对这些新领域时的独特思考方法.”
“我信奉'疑人不用,用人不疑'的准则.作为一名企业家,我相信人才是最重要的因素,你需要找到有用人才.”
“我曾经与内森·麦沃尔德(Nathan Myhrvold,微软前首席技术官)有过接触,也曾与盖茨打过交道.我发现,在关于如何通过技术帮助他人事宜上,我们有着一样的热情.”
“我曾经负责超级计算业务.很多人认为我应当放弃该职位,而去做汽车、电视机或是手表什么的.不过,当时我认为我们将会看到水滴效应,即我们将受到计算机处理速度、摩尔定律以及其他因素的限制.”
“当我与盖茨、麦沃尔德谈及这一看法时,我发现我们是'英雄所见略同'.我们认为,应当为此找到答案,但答案不会自己从天上掉下来.这也我是加入微软的原因.因此我加盟微软,成为当时并不存在的非PC计算部门总经理.”
13、米奇·卡波尔(Mitch Kapor),Lotus创始人,Mozilla基金会会长:
“我记得在Lotus创建之前,曾经与盖茨见过面.有人当时在与微软谈一项交易,盖茨这时驾驶一辆跑车高速行驶而来,他参加会议已经迟到,澡也没洗……这也是他性格中最引人注目的地方.”
“盖茨将自己在技术和商业上的卓越才能进行结合,从而感受到PC软件和硬件的发展趋势.他也因此建立了规模庞大的市场业务.”
“微软一旦认定目标,就能持之以恒加以执行,这当然是他们的优点.但往不好的地方说,那就是微软市场模式不利于正常市场竞争,而那种'不惜万难以争取胜利'的信条,将使大家日子都不好过.”
14、比尔·坎贝尔(Bill Campbell),财务软件开发商Intuit董事长:
“企业家都具备承受风险的素质,盖茨也不例外.在其30多的企业家生涯中,他展示了作为企业家应具有的精神和创新性才能.他改变了全球软件产业格局,并通过辛勤工作而创建了微软这一知名品牌,我对此感到由衷钦佩.
Flash动画[框架]Flex开源框架OpenFlux
作者 Jon Rose译者 张龙
该项目的贡献者Ryan Campbell讨论了标准的Flex组件和OpenFlux组件的区别:
OpenFlux组件和现在的Flex组件大体的区别是前者将逻辑分离到MVC架构中了。这使你能在保持其他部分功能不变的情况下,轻松的替换组件的一部分。List组件更进一步,它还分离了布局逻辑,这样你就能轻松地使用新的布局来呈现列表条目了。
在今年初Ben Stucki宣布该项目发布的帖子中,他详细论述了构建OpenFlux的动机:
OpenFlux真正的目的是在你的项目中进行定制。使用一个无视图组件的系统意味着你可以快速轻松地 创建大量新颖有趣的组件而不必担心会破坏组件的其他部分。还记得过去在Accordian、TabNavigator或List组件上使用的小把戏吗?我 当然记得,这就是创建它的原因。答案并不是保护所有东西而是创建一个更棒的组件模型!
如果你想进一步学习OpenFlux,InsideRIA上有一篇很好的文章谈到了如何上手该框架。theflexshow.com上还发布了今年初采访Ben Stucki的一段音频。
[教程]ActionScript3设计模式图
1. Factory(工厂)模式

2. Singleton(单例)模式

3. Decorator(装饰)模式

4. Adapter(适配器)模式

5. Composite(组合)模式

1. Command(命令)模式

2. Observer(观察者)模式

3. Template(模板)模式

4. State(状态)模式

5. Strategy(策略)模式

6. MVC模式

Mikel
